Sounds like a permissions issue on the 400. Are you 100% certain that the account you are using has write access to the particular virtual directory?
The fact that you’re getting a 150 return code from the FTP server means that there isn’t anything wrong with your setup, *unless* the TCP port number chosen for the data connection is being blocked.
Is this an active or passive transfer? If the one fails, have you tried the other?