Сохраните файл на ftp-сервере в подкаталоге

У меня есть код, который позволяет мне получить доступ к серверу для выполнения ftp-транзакций. Я проверил соединение, и оно работает. проблема в сохранении файлов. чтобы помочь нарисовать картину, вот как настроен адрес.

ftp-сервер: ftp.MyMainDomain.com

путь входа в систему ftp указывает на: www.another_website_Under_myDomain.com/gallery/images

когда я проверял соединение, ftp-сервер прикреплял меня прямо к папке с изображениями, и я даже читал подкаталоги (ie ..images/subdirectory1, ..images/subdirectory2).

Что мне сейчас нужно, так это иметь возможность сохранять файлы в каждую из папок. Я думал, что все, что мне нужно сделать, это добавить subdir, к которому я хотел получить доступ, в конец ftp_server uri, но это не работает. Что я должен делать?

Uri ftpUri = new Uri((Ftp_Server_Address + "/" + SubDirectory+ "/"), UriKind.Absolute);
if (ftpUri.Scheme == Uri.UriSchemeFtp)// check ftp address,
{
    DirRequest = (FtpWebRequest)FtpWebRequest.Create(ftpUri);

    DirRequest.Method = ReqMethod;
    DirRequest.Credentials = new NetworkCredential(FtpUserName, FtpPassword);
    DirRequest.UsePassive = true;
    DirRequest.UseBinary = true;
    DirRequest.KeepAlive = false;
    //change picture to stream
    Stream PicAsStream =  Pic.Bitmap_to_Stream(Pic.BitmapImage_to_Bitmap(Pic.Photo));
    //send ftp with picture
    Stream ftpReqStream = DirRequest.GetRequestStream();
    ftpReqStream = PicAsStream;
    ftpReqStream.Close();
    SendFtpRequest(ReqMethod);
}

person chris    schedule 19.07.2013    source источник
comment
Что значит не работает? Это не описывает ничего о проблеме.   -  person lc.    schedule 19.07.2013
comment
Как указано выше, теперь мне нужно иметь возможность сохранять файлы в каждую из папок...   -  person chris    schedule 19.07.2013
comment
Так что же делает ваш код такого, чего вы не ожидаете? Или что он делает не так, как вы ожидаете? Вы получаете сообщение об ошибке? Если да, то что и где? Он вообще сохраняет файл?   -  person lc.    schedule 19.07.2013
comment
Какая ошибка или исключение возникает в вашем коде?   -  person Shaharyar    schedule 19.07.2013


Ответы (1)


В этой строке:

ftpReqStream = PicAsStream;

Вы не отправляете Stream ftp Server, но назначаете PicAsStream ftpReqStream, а затем закрываете его. Ваш код ничего не делает.

Сделайте это следующим образом:

Создайте buffer вашего файла изображения (не поток):

FileStream ImageFileStream = File.OpenRead(your_file_path_Here);
byte[] ImageBuffer = new byte[ImageFileStream.Length];
ImageFileStream.Read(ImageBuffer, 0, ImageBuffer.Length);
ImageFileStream.Close();

а затем просто напишите это в свой ftpReqStream:

Stream ftpReqStream = DirRequest.GetRequestStream();
ftpReqStream.Write(ImageBuffer, 0, ImageBuffer.Length);
ftpReqStream.Close();
person Shaharyar    schedule 19.07.2013
comment
Когда программа доходит до кода => строка:Поток ftpReqStream = DirRequest.GetRequestStream(); выдает исключение system.net.webException; Запрошенный URI недопустим для этой FTP-команды. - person chris; 19.07.2013
comment
Я только что попробовал еще раз и изменил строку => Uri ftpUri = new Uri((Ftp_Server_Address + / + SubDirectory+ /), UriKind.Absolute); Я удалил последний ((+ /)), теперь он имеет ошибку => system.net.webeexception Удаленный сервер вернул ошибку: (553) Имя файла не разрешено. Глядя на это сейчас. Кроме того, я работаю с растровым изображением, мне интересно, придется ли мне сохранять его для погружения, а затем загружать и удалять после. - person chris; 19.07.2013
comment
Взгляните на это: stackoverflow.com/questions/9418404/ - person Shaharyar; 20.07.2013