将文件保存在子目录中的ftp服务器上

时间:2013-07-19 01:42:07

标签: c# ftp webrequest ftpwebrequest

我有代码允许我访问服务器来执行ftp事务。我测试了连接,它的工作原理。问题是保存文件。为了帮助绘制图片,这就是地址的设置方式。

ftp服务器: ftp.MyMainDomain.com

路径登录ftp指向: www.another_website_Under_myDomain.com/gallery/images

当我测试连接时,ftp服务器直接将我固定到images文件夹,我甚至已经读出了子目录(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);
}

1 个答案:

答案 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();