从URL VB.net/C#

时间:2016-10-05 18:05:09

标签: c# vb.net pdf httpwebrequest webclient

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

  1. 使用Window API" URLDownloadToFile"
  2. WebClient方法 webclient.DownloadFile(url,dest)''有/无信用
  3. HTTP WebRequest方法:
  4. 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的响应方法。 如果有人遇到这个真正的问题,请帮忙。

    提前致谢!!!

1 个答案:

答案 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而不是手动关闭流的良好编码习惯。)