2013-07-19 3 views
-2

У меня есть код, который позволяет мне получить доступ к серверу для выполнения транзакций 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); 
} 
+0

Что означает «не работает»? Это не описывает * ничего * о проблеме. –

+0

Как указано выше «Что мне нужно сейчас, чтобы иметь возможность сохранять файлы в каждой из папок ...» – chris

+0

Так что же делает ваш код, чего вы не ожидаете? Или что это не так, как вы ожидаете? Вы получаете сообщение об ошибке? Если да, то что и где? Сохраняет ли файл вообще? –

ответ

0

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

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(); 
+0

Когда программа попадает в код => line: Stream ftpReqStream = DirRequest.GetRequestStream(); он выбрасывает «system.net.webexception; запрошенный URI недействителен для этой команды FTP». – chris

+0

Я просто попробовал еще раз и изменил строку => Uri ftpUri = new Uri ((Ftp_Server_Address + "/" + SubDirectory + "/"), UriKind.Absolute); Я удалил последний ((+ "/")), теперь он имеет ошибку => system.net.webexception Удаленный сервер возвратил ошибку: (553) Имя файла не разрешено. Смотри сейчас. Кроме того, я работаю с растровым изображением, мне интересно, нужно ли мне сохранять его для погружения, а затем загружать и удалять. – chris

+0

Посмотрите на это: http://stackoverflow.com/questions/9418404/cant-connect-to-ftp-553-file-name-not-allowed – Shaharyar