【问题标题】:Save a file on a ftp server in a subdirectory将文件保存在 ftp 服务器上的子目录中
【发布时间】:2013-07-19 01:42:06
【问题描述】:

我的代码允许我访问服务器以进行 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);
}

【问题讨论】:

  • “不起作用”是什么意思?这并没有描述关于问题的任何内容
  • 如上所述“我现在需要的是能够将文件保存到每个文件夹中......”
  • 那么您的代码做了哪些您意想不到的事情?或者它没有做什么你所期望的?你有错误吗?如果是这样,是什么,在哪里?它会保存文件吗?
  • 您的代码出现什么错误或异常?

标签: c# ftp webrequest ftpwebrequest


【解决方案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();

【讨论】:

  • 程序获取代码时 => 行:Stream ftpReqStream = DirRequest.GetRequestStream();它会抛出“system.net.webexception;请求的 URI 对此 FTP 命令无效。”
  • 我刚刚又试了一次,换行=> Uri ftpUri = new Uri((Ftp_Server_Address + "/" + SubDirectory+ "/"), UriKind.Absolute);我删除了最后一个((+“/”)),现在它有错误=> system.net.webexception远程服务器返回错误:(553)文件名不允许。现在查一下。另外,我正在处理位图图像,我想知道是否必须将其保存以进行潜水,然后上传并删除。
猜你喜欢
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
相关资源
最近更新 更多