C # проблема с файлами, которые я загружаю на свой FTP - PullRequest
3 голосов
/ 09 июня 2011

У меня очень странная проблема, когда я загружаю файлы в свои файлы FTP (zip или gif).

Я создаю zip-файл с кодом и загружаю его с кодом на FTP.Я могу открыть любой из файлов этого типа, когда создаю их на локальном диске.Но когда я загружаю все это на FTP и затем загружаю, он показывает мне сообщение для файла .zip как «неожиданный конец архива» и для типа файла .gif после того, как я их загружаю и пытаюсь открыть в XP Windows для просмотра изображений и факсов в Windows«Ошибка рисования»:

Я использую этот код для загрузки на FTP:

 FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.tim.com/" + fileName);
                request.Method = WebRequestMethods.Ftp.UploadFile;
            // This example assumes the FTP site uses anonymous logon.
            request.Credentials = new NetworkCredential(ftpuser,ftppass);

            // Copy the contents of the file to the request stream.
            StreamReader sourceStream = new StreamReader(filePath +"\\"+ fileName);
            byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
            sourceStream.Close();
            request.ContentLength = fileContents.Length;
            request.KeepAlive = false;

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

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

Ответы [ 2 ]

8 голосов
/ 09 июня 2011

Этот код:

StreamReader sourceStream = new StreamReader(filePath +"\\"+ fileName);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());

Вы читаете байтовый поток как текст с определенной кодировкой (UTF8) ... но GIF и ZIP - это двоичные файлы, а не текстовые файлы. Кодировка их искажает.

Попробуйте использовать что-то вроде ReadAllBytes :

byte[] fileContents = File.ReadAllBytes("filepath");
3 голосов
/ 09 июня 2011

Вы читаете двоичные данные в строку (при условии, что это utf8) и преобразует их обратно в массив байтов. Это совершенно неправильно.

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