【问题标题】:C# ASPX FTP Filesize wrong after upload上传后 C# ASPX FTP 文件大小错误
【发布时间】:2011-11-01 18:57:33
【问题描述】:

我正在通过 FTP 上传一个 613.6 kb 的文件,它是一个 PDF 文件。当它到达服务器时,它现在是 82 KB。

在我的 Web.Config 我有

<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,它们都没有产生差异。我添加了冲洗和关闭的想法,但也没有帮助。我收到有关编码的错误,一旦我添加错误消失了,但我没有其他错误。

【问题讨论】:

  • 这个 82 kb 的文件是不是损坏了,还是可以打开?
  • 损坏,adobe 不会打开它。

标签: c# asp.net visual-studio-2010 ftpwebrequest


【解决方案1】:

是否该文件包含零并且您的比较应该是reader.PeekChar() &gt;=0 而不是reader.PeekChar() &gt; 0

【讨论】:

  • 然后呢? PDF 文件可以包含值为 0x00 的字节。
  • 这口井可能是问题所在。 Charcode 0 是文件中可能存在的有效字符。
【解决方案2】:

您真的需要使用BinaryWriterBinaryReader,它们可能会进行某种缓冲我不相信您需要它。试试这段代码,看看会发生什么

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

【讨论】:

    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    相关资源
    最近更新 更多