Как загрузить большие файлы на FTP-сервер в ASP MVC - PullRequest
0 голосов
/ 06 июня 2018

Я занимаюсь разработкой веб-сайта ASP MVC.Теперь мне нужно загрузить файлы (ZIP-файлы) на мой FTP-сервер.Для загрузки я использую этот код.

Этот код загружает только те файлы, которые имеют размер <10 МБ. </p>

. Например: когда я загружаю файл с размером 150 МБ с этим кодом, он повреждаетсяи размер файла изменился до 300 МБ на моем Ftp-сервере.

Так что любой может мне помочь ..

 byte[] fileBytes = null;

                //Read the FileName and convert it to Byte array.
                string filename = Path.GetFileName(FileUpload1.FileName);

                using (StreamReader fileStream = new StreamReader(FileUpload1.InputStream))
                {
                    fileBytes = Encoding.UTF8.GetBytes(fileStream.ReadToEnd());
                    fileStream.Close();
                }

                try
                {
                    //Create FTP Request.
                    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftp + ftpFolder + "/" + fileName);
                    request.Method = WebRequestMethods.Ftp.UploadFile;

                    //Enter FTP Server credentials.
                    request.Credentials = new NetworkCredential(ftpUName, ftpPWord);
                    request.ContentLength = fileBytes.Length;
                    request.UsePassive = true;
                    request.UseBinary = true;
                    request.ServicePoint.ConnectionLimit = fileBytes.Length;
                    request.EnableSsl = false;

                    using (Stream requestStream = request.GetRequestStream())
                    {
                        requestStream.Write(fileBytes, 0, fileBytes.Length);
                        requestStream.Close();
                    }

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

                    response.Close();
                }
                catch (WebException ex)
                {
                    throw new Exception((ex.Response as FtpWebResponse).StatusDescription);
                }

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Возможно, он поврежден, потому что вы читаете данные в кодировке utf8.Вы должны прочитать его в двоичном формате.

Не использовать:

using (StreamReader fileStream = new StreamReader(FileUpload1.InputStream))
{
   fileBytes = Encoding.UTF8.GetBytes(fileStream.ReadToEnd());
   fileStream.Close();
}

Вы должны использовать File.ReadAllBytes или BinaryReader (Stream)

https://msdn.microsoft.com/en-us/library/system.io.file.readallbytes(v=vs.110).aspx

https://msdn.microsoft.com/de-de/library/system.io.binaryreader(v=vs.110).aspx

для вашего примера:

   byte[] fileBytes = File.ReadAllBytes(Path.GetFileName(FileUpload1.FileName));
   try
   {
          //Create FTP Request.
          FtpWebRequest request = (FtpWebRequest)...
0 голосов
/ 06 июня 2018

Добавьте это в ваш web.config

<httpRuntime maxRequestLength="whatever value you need in kb max value is 2,147,483,647 kb" relaxedUrlToFileSystemMapping="true" />

в разделе system.web по умолчанию установлено ограничение размера 4 МБ

Подробности здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...