从URL VB.net/C#下载时,pdf损坏

本文关键字:pdf 损坏 下载 URL VB net | 更新日期: 2023-09-27 18:11:36

我尝试了以下三种方法,但问题仍然存在。

  1. 使用windows API "URLDownloadToFile"
  2. WebClient方法webclient.DownloadFile (url,桌子)"有/没有credientials
  3. 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的响应方法。如果有人遇到这样的问题,请帮帮我。

提前感谢!!

从URL VB.net/C#下载时,pdf损坏

您的代码只写入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而不是手动关闭流是很好的编码实践。)