Adam
Adam

Reputation: 11

Why can't I upload using Windows Phone 7 FTP app

I want to upload a photo, from the WP7 by FTP application. If I choose the photo, and click the upload button, the server response: 503 bad sequence of commands.

public static void UploadFile(Stream file, string RemoteFile)
{
    SocketAsyncEventArgs socketEventArg2 = new SocketAsyncEventArgs();
    Socket socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    int bytes;

    Execute("STOR " + RemoteFile);
    AutoResetEvent sendCompleted = new AutoResetEvent(false);

    socketEventArg2.Completed += delegate { 
        sendCompleted.Set(); 
    };

    file.Seek(0, SeekOrigin.Begin);
    while ((bytes = file.Read(buffer2, 0, buffer2.Length)) > 0)
    {
        socketEventArg2.SetBuffer(buffer2, 0, bytes);
        socket2.SendAsync(socketEventArg2);
        sendCompleted.WaitOne();
    }
    file.Close();
}

And this method call:

Stream ss = e.ChosenPhoto;
.
.
for (int i = 0; i < library.Pictures.Count; i++)
{
    Stream s = library.Pictures[i].GetImage();
    if (s.Length == e.ChosenPhoto.Length)
    {
        string filename = library.Pictures[i].Name;
        MessageBoxResult m = MessageBox.Show(filename, "Upload?", MessageBoxButton.OKCancel);
        if (m == MessageBoxResult.OK)
        {
            Ftp.UploadFile(ss, filename);
        }
        else
        {
            return;
        }
    break;
    }
}

The ss variable is a Stream type, the filename variable is a String which is name come into being the remote server.

Upvotes: 0

Views: 1033

Answers (1)

Randolpho
Randolpho

Reputation: 56411

You have to do more than just call STOR with FTP -- file transfers occur over a separate connection than the command connection. See the response to this question for additional details.

Edit
I just noticed this is for WP7. It looks like you're trying to implement FTP on WP7. Boy are you in for a world of hurt. I have a few suggestions you may consider:

First, the easy, but expensive-up-front way: purchase a third party library that does FTP over sockets such as SecureBlackbox.

Second, the more complex, cheaper-initially-but-possibly-more-expensive-long-term way: consider creating an intermediary web service that accepts the file as a WEB request, then transfers the file using FtpWebRequest server-side. Azure will be your friend there, at least until the uploads start sapping bandwidth.

Third, don't support FTP until FtpWebRequest becomes available for WP7.

Upvotes: 1

Related Questions