从URL VB.net/C#下载时,pdf损坏
本文关键字:pdf 损坏 下载 URL VB net | 更新日期: 2023-09-27 18:11:36
我尝试了以下三种方法,但问题仍然存在。
- 使用windows API "URLDownloadToFile"
- WebClient方法webclient.DownloadFile (url,桌子)"有/没有credientials HTTP WebRequest方法:
下载strURLFileandPath, strFileSaveFileandPath
{
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(strURLFileandPath);
HttpWebResponse ws = (HttpWebResponse)wr.GetResponse();
Stream str = ws.GetResponseStream();
byte[] inBuf = new byte[100000];
int bytesToRead = (int) inBuf.Length;
int bytesRead = 0;
while (bytesToRead > 0)
{
int n = str.Read(inBuf, bytesRead,bytesToRead);
if (n==0)
break;
bytesRead += n;
bytesToRead -= n;
}
FileStream fstr = new FileStream(strFileSaveFileandPath, FileMode.OpenOrCreate, FileAccess.Write);
fstr.Write(inBuf, 0, bytesRead);
str.Close();
fstr.Close();
}
我仍然面临这个问题,我可以在我的本地系统下载的文件,但是当我打开它时,它显示腐败的pdf。!!!!我只是想从URL下载pdf,这是我的查询VB.net/C#不使用ASP.net的响应方法。如果有人遇到这样的问题,请帮帮我。
提前感谢!!
您的代码只写入100000字节的下载PDF,因此每个大于100000字节的PDF都会损坏。
要读取更多字节,必须将每个缓冲区的内容写入FileStream。
应该这样做:
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(strURLFileandPath);
using (HttpWebResponse ws = (HttpWebResponse)wr.GetResponse())
using (Stream str = ws.GetResponseStream())
using (FileStream fstr = new FileStream(strFileSaveFileandPath, FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] inBuf = new byte[100000];
int bytesRead = 0;
while ((bytesRead = str.Read(inBuf, 0, inBuf.Length)) > 0)
fstr.Write(inBuf, 0, bytesRead);
}
(在每个IDisposable
上使用using
而不是手动关闭流是很好的编码实践。)