当我尝试以下三种方法时,问题仍然存在。
public static void Download(String strURLFileandPath,String 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();
}
我仍然遇到问题,我可以在我的本地系统下载文件,但是当我打开它显示Corrupt pdf时。 !!!!我只想从URL下载pdf,这就是我在VB.net/C#中的查询,而不是使用ASP.net的响应方法。 如果有人遇到这个真正的问题,请帮忙。
提前致谢!!!
答案 0 :(得分:1)
您的代码仅写入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);
}
(在每个using
上使用IDisposable
而不是手动关闭流的良好编码习惯。)