如何使用FtpWebRequest上传图像?

Baz*_*nga 3 c# ftpwebrequest asp.net-mvc-3

我一直致力于为客户构建一个功能,使他们能够从www.site1.com上传图像,将图像URL存储到数据库,并将图像存储到www.site2.com/images上的文件中.我已经设法将文件上传到目标位置,但是当我尝试打开并查看图像时,据说它包含错误.我从来没有真正使用过图像,所以我很茫然.

这是用于上传文件的方法:

public static void UpLoadImage(Stream image, string target)
    {
        FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp://www.site2.com/images/" + target);
        req.UseBinary = true;
        req.Method = WebRequestMethods.Ftp.UploadFile;
        req.Credentials = new NetworkCredential("myUser", "myPass");
        StreamReader rdr = new StreamReader(image);
        byte[] fileData = Encoding.UTF8.GetBytes(rdr.ReadToEnd());

        rdr.Close();
        req.ContentLength = fileData.Length;
        Stream reqStream = req.GetRequestStream();
        reqStream.Write(fileData, 0, fileData.Length);
        reqStream.Close();
    }
Run Code Online (Sandbox Code Playgroud)

这是从(image1是HttpPostedFileBase)调用方法的地方:

myObject.UpLoadImage(image1.InputStream, storedTL.ID + "-1.png");
Run Code Online (Sandbox Code Playgroud)

如果有一种方法可以让我的代码工作,或者如果有更好的方法来做到这一点,请帮助.

arm*_*oon 10

StreamReader用于读取文本.

更改:

StreamReader rdr = new StreamReader(image);
byte[] fileData = Encoding.UTF8.GetBytes(rdr.ReadToEnd());
Run Code Online (Sandbox Code Playgroud)

byte[] fileData = File.ReadAllBytes(image);
Run Code Online (Sandbox Code Playgroud)

  • 有什么令人敬畏的是OP从MSDN网站http://msdn.microsoft.com/en-us/library/ms229715(v=vs.110).aspx上的示例中获取了他的代码.我知道这是因为我也是这样做的,并且最终在这里(可能是)同样的问题.图像文件永远不会打开,它们必须被SteamReader破坏,永远不能再次使用... :(没有任何地方说这个方法*只适用于文本文件.这可能有助于FTP通过代码新手像我自己如果它没有. (2认同)
  • 这个答案我错过了什么?OP 方法中定义的图像变量是一个 Stream 对象,但 File.ReadAllBytes 采用 String 输入类型。 (2认同)