twaldron
twaldron

Reputation: 2752

Uploading PostedFile to FTP

I am needing to upload a posted file to an FTP file location in my controller.

Here is what I have now.

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


       .....

    }

The file is being uploaded, it has the correct number of pages, however there is no text in the new file. (these are pdfs, I will do validation on the type later, just trying to get it to work now).

Thanks!

Upvotes: 2

Views: 4162

Answers (1)

sarvesh
sarvesh

Reputation: 2743

You are reading PDF file as if they were text files. Instead try this.

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

Upvotes: 3

Related Questions