Почему я не могу загрузить с помощью FTP-приложения Windows Phone 7 - PullRequest
0 голосов
/ 04 января 2012

Я хочу загрузить фотографию из приложения WP7 по FTP.Если я выберу фотографию и нажму кнопку загрузки, ответ сервера: 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();
}

И вызов этого метода:

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;
    }
}

Переменная ss являетсяStream типа, переменная filename представляет собой String, имя которого является удаленным сервером.

1 Ответ

1 голос
/ 04 января 2012

Вы должны сделать больше, чем просто позвонить STOR с FTP - передача файлов происходит через отдельное соединение, чем командное соединение.См. Ответ на этот вопрос для получения дополнительной информации.

Редактировать
Я только что заметил, что это для WP7.Похоже, вы пытаетесь реализовать FTP на WP7.Мальчик, ты в мире боли.У меня есть несколько предложений, которые вы можете рассмотреть:

Во-первых, простой, но дорогой предварительный способ: купите стороннюю библиотеку, которая поддерживает FTP через сокеты, такие как SecureBlackbox .

Во-вторых, более сложный, более дешевый, изначально, но, возможно, более дорогой, долгосрочный способ: рассмотрите возможность создания промежуточной веб-службы, которая принимает файл как веб-запрос, а затем передает файл с помощью FtpWebRequest на стороне сервера.Azure будет вашим другом там, по крайней мере до тех пор, пока загрузка не начнет снижать пропускную способность.

В-третьих, не поддерживайте FTP, пока FtpWebRequest не станет доступным для WP7.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...