Nazneen s Ответов: 1

Файл Excel повреждается при загрузке и загрузке с FTP-сервера


HI ,

There are TWO Excel Files in my Program which I am trying to upload to a FTP server and then later Download it  and its getting uploaded and downloaded with no error but when i try to open the file i get error message its corrupted or not in correct format i.e

"file format or extension not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file."

the code i am using for upload is as follows :


Что я уже пробовал:

private void FtpUploadFile(string filename)
        {
            string user_name = "username";
            string password = "password";
            
            // Get the object used to communicate with the server.
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.ftpsite.com/excel.xlsx");
            request.Method = WebRequestMethods.Ftp.UploadFile;

            // Get network credentials.
            request.Credentials = new NetworkCredential(user_name, password);

            // Read the file's contents into a byte array.
            byte[] bytes = System.IO.File.ReadAllBytes(filename);

            // Write the bytes into the request stream.
            request.ContentLength = bytes.Length;
            using (Stream request_stream = request.GetRequestStream())
            {
                request_stream.Write(bytes, 0, bytes.Length);
                request_stream.Close();
            }
        }

        private void btnupload_Click(object sender, EventArgs e)
        {
            try
            {
                this.Cursor = Cursors.WaitCursor;
                lblStatus.Text = "Working...";
                Application.DoEvents();

                FtpUploadFile(txtFile.Text);

                lblStatus.Text = "Done";
            }
            catch (Exception ex)
            {
                lblStatus.Text = "Error";
                MessageBox.Show(ex.Message);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }

            
        }



Help please.

Garth J Lancaster

Я не уверен, как это сделать (или если вы можете сделать это с помощью) FtpWebRequest, но я бы посмотрел, если вы передаете в текстовом или двоичном режиме, чтобы начать с (это должно быть двоично)

Nazneen s

не совсем получилось у тебя там @garth

Garth J Lancaster

видишь это https://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.usebinary(v=против 110). aspx

Nazneen s

все еще не работает Гарт я попробовал

запрос.Способ = WebRequestMethods.По FTP.Протоколу;
запрос.UsePassive = true;
запрос.KeepAlive = false; (и то и другое верно)
запрос.UseBinary = true;

Garth J Lancaster

Я так понимаю вы проверили очевидное,

а) размер файла в байтах до ftp = размер файла в байтах после
Б) может быть, сгенерировать хэш файла на каждой "стороне" и сравнить

1 Ответов

Рейтинг:
10

Nazneen s

я сам придумал решение просто объявлять все переменные в начале объявления вставьте этот :

FtpWebRequest ftpClient = (FtpWebRequest)FtpWebRequest.Create(ftpurl + "/" + filename);
            ftpClient.Credentials = new System.Net.NetworkCredential(ftpusername, ftppassword);
            ftpClient.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
            ftpClient.UseBinary = true;
            ftpClient.KeepAlive = true;
            System.IO.FileInfo fi = new System.IO.FileInfo(fileurl);
            ftpClient.ContentLength = fi.Length;
            byte[] buffer = new byte[4097];
            int bytes = 0;
            int total_bytes = (int)fi.Length;
            System.IO.FileStream fs = fi.OpenRead();
            System.IO.Stream rs = ftpClient.GetRequestStream();
            while (total_bytes > 0)
            {
                bytes = fs.Read(buffer, 0, buffer.Length);
                rs.Write(buffer, 0, bytes);
                total_bytes = total_bytes - bytes;
            }
            //fs.Flush();
            fs.Close();
            rs.Close();
            FtpWebResponse uploadResponse = (FtpWebResponse)ftpClient.GetResponse();
        string value = uploadResponse.StatusDescription;
            uploadResponse.Close();


Спасибо за помощь.