C # ASPX FTP Размер файла неверен после загрузки - PullRequest
1 голос
/ 01 ноября 2011

Я загружаю файл через FTP размером 613,6 КБ, это файл PDF.Когда он прибывает на сервер, в моем Web-файле теперь его размер составляет 82 КБ.

. У меня есть

<httpRuntime executionTimeout="7200" maxRequestLength="2097151" requestValidationMode="2.0"/>

Мой код такой:

 void UploadFileToFtp(FileInfo file, FtpWebRequest req)
    {
        int buffLength = 2048;

        using (var reader = new BinaryReader(file.OpenRead(), Encoding.Default))

        {
            using (var writer = new BinaryWriter(req.GetRequestStream()))
            {
                while (reader.PeekChar() > 0) writer.Write(reader.ReadBytes(buffLength));
                writer.Flush();
                writer.Close();
            }
            reader.Close();
        }

    } 

Я думалимел какое-то отношение к кодированию, поэтому я попробовал ASCII, Default и Unicode, ни один из которых не сделал различий.Я добавил Флеш и Близкое, думая, что это делает, но тоже не помог.Я получаю сообщение об ошибке в кодировке, и как только я добавил, что ошибка ушла, но у меня нет других ошибок.

Ответы [ 2 ]

5 голосов
/ 01 ноября 2011

Может быть, файл содержит нули, и вы должны сравнить reader.PeekChar() >=0, а не reader.PeekChar() > 0?

0 голосов
/ 01 ноября 2011

Вам действительно нужно использовать BinaryWriter и BinaryReader, они, вероятно, выполняют какую-то буферизацию, я не уверен, что вам это нужно.Попробуйте этот код и посмотрите, что получится

var buffer = new byte[2048];
int bytesRead = 0;
var reqStream = req.GetRequestStream();

using (var fs = file.OpenRead())
{
    while (0 < (bytesRead = fs.Read(buffer, 0, buffer.Length)))
        reqStream.Write(buffer, 0, bytesRead);
}
...