将PostedFile上传到FTP

时间:2012-02-27 18:05:22

标签: asp.net-mvc

我需要将发布的文件上传到我的控制器中的FTP文件位置。

这就是我现在所拥有的。

  public  ActionResult Upload(HttpPostedFileBase file)
    {     
            string fileName = System.IO.Path.GetFileName(file.FileName);
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://10.10.0.3"+"/"+fileName);
            request.Method = WebRequestMethods.Ftp.UploadFile;

            request.Credentials = new NetworkCredential("username", "password");

            StreamReader streamReader = new StreamReader(file.InputStream);

            byte[] fileContents = Encoding.UTF8.GetBytes(streamReader.ReadToEnd());
            streamReader.Close();
            request.ContentLength = fileContents.Length;

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

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


       .....

    }

正在上传文件,它具有正确的页数,但新文件中没有文本。 (这些是pdf,我稍后会对类型进行验证,只是试着让它现在正常工作)。

谢谢!

1 个答案:

答案 0 :(得分:2)

您正在阅读PDF文件,就好像它们是文本文件一样。而是试试这个。

var sourceStream = file.InputStream;
requestStream = request.GetRequestStream();
request.ContentLength = sourceStream.Length;
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead = sourceStream.Read(buffer, 0, BUFFER_SIZE);
do
{
  requestStream.Write(buffer, 0, bytesRead);
  bytesRead = sourceStream.Read(buffer, 0, BUFFER_SIZE);
} while (bytesRead > 0);
sourceStream.Close();
requestStream.Close();
response = (FtpWebResponse)request.GetResponse();