2011-11-01 50 views
1

我通过FTP上传文件是613.6 kb,它是一个PDF文件。当它到达服务器时,现在是82 KB。上传后C#ASPX FTP文件大小错误

在我的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,默认和Unicode其中没有做了一个差异。我加入了冲洗和关闭思考,但没有帮助。我收到了关于编码的错误,一旦我补充说错误消失了,但我没有其他错误。

+3

是82 kb文件损坏,还是你仍然可以打开它? – jadarnel27

+0

腐败,adobe不会发表它。 – StephanM

回答

5

难道是该文件包含零并且您的比较应该是reader.PeekChar() >=0而不是reader.PeekChar() > 0

+0

这是一个有效的PDF文件 – StephanM

+0

而且? PDF文件可以包含值为0x00的字节。 –

+0

就是这样,谢谢! – StephanM

0

你真的需要使用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); 
}