使用ftpwebrequest上传到ftp时图像损坏

时间:2013-04-05 04:53:34

标签: c# ftp

我用这段代码将图片上传到ftp。但是图像已损坏。 尝试上传的图片是Base64 string.i转换为流并将其传递给UpLoadImage。

 public static void UpLoadImage(Stream image, string target)
   {
    FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp://www.examp.com/images/" + target);
    req.UseBinary = true;
    req.Method = WebRequestMethods.Ftp.UploadFile;
    req.Credentials = new NetworkCredential("UserNm", "PassWd");
    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();
}

而不是:

  

StreamReader rdr = new StreamReader(image);       byte [] fileData = Encoding.UTF8.GetBytes(rdr.ReadToEnd());       rdr.Close();

如果我使用byte[] fileData = File.ReadAllBytes(image); 它给了我一个错误,文件名是260个字符。

请有人帮忙解决这个问题。

2 个答案:

答案 0 :(得分:2)

喜欢评论说 使用

byte[] fileData = File.ReadAllBytes(filePath);

表示非文本文件的所有文件。

像那样:

private void FTPUPLOAD(string imgPath)
        {
            FTPDelete(img);
            // Get the object used to communicate with the server.
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(BaseUrl +Path.GetFileName(imgPath));
            request.Method = WebRequestMethods.Ftp.UploadFile;

            // This example assumes the FTP site uses anonymous logon.
            request.Credentials = new NetworkCredential(Account, Password);

            // Copy the contents of the file to the request stream.
             //THIS IS THE CODE
            byte[] fileContents = File.ReadAllBytes(imgPath);

 Stream requestStream = request.GetRequestStream();
            requestStream.Write(fileContents, 0, fileContents.Length);
            requestStream.Close();

            FtpWebResponse response = (FtpWebResponse)request.GetResponse();

            response.Close();
        }

答案 1 :(得分:1)

您应该使用Stream来读取二进制文件,而不是StreamReader。 StreamReader仅用于读取文本文件。

和关于错误Maximum Path Length Limitation

  

最大路径长度限制在Windows API中(有一些   以下段落中讨论的例外情况),最大长度   对于路径是MAX_PATH,定义为260个字符。本地人   path按以下顺序构成:驱动器号,冒号,   反斜杠,名称由反斜杠分隔的组件和终止   空字符。例如,驱动器D上的最大路径是“D:\ some   256个字符的路径字符串“where”“表示不可见的   终止当前系统代码页的空字符。 (该   字符< >这里使用的是视觉清晰度,不能成为其中的一部分   一个有效的路径字符串。)

路径限制:http://msdn.microsoft.com/en-us/library/system.io.pathtoolongexception.aspx

<强>被修改

我写了一个简单的: 将图像转换为b64并返回

//Convert image to b64
            string path = @"E:\Documents and Settings\Ali\Desktop\original.png";
            Image img = Image.FromFile(path);
            byte[] arr;
            using (MemoryStream ms = new MemoryStream())
            {
                img.Save(ms, ImageFormat.Jpeg);
                arr = ms.ToArray();
            }
            String b64 = Convert.ToBase64String(arr);//result:/9j/4AAQSkZJRgABAQEA...
            //Get image bytes
            byte[] originalimage= Convert.FromBase64String(b64);

将b64发送到您的函数并将其转换回byte[] originalimage= Convert.FromBase64String(b64);