2016-10-05 145 views
-4

問題仍然存在,但我嘗試了三種方法。pdf從URL下載時損壞pdf.net/C#

  1. 使用窗口API 「URLDownloadToFile」
  2. WebClient的方法 webclient.DownloadFile(URL,DEST) '' 有/無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(); 
    } 

Sti我會面臨的問題,文件我可以在我的本地系統下載,但是當我打開它顯示腐敗pdf。 !!!!我只是想從URL下載pdf,這就是我在VB.net/C#中的查詢,不使用ASP.net的響應方法。 如果有人面臨這個真正的問題,請幫助。

在此先感謝!

+0

試試這個:StreamWriter的FSTR =新的StreamWriter(strFileSaveFileandPath ,true,Encoding.UTF8); – jdweng

+0

我也試過這一個,沒有幫助我,我現在注意到,我要求下載PDF的URL路徑也被重定向到其他路徑...意味着下載的文件根本不是PDF,可以通過將PDF擴展爲html來打開它。希望這會提供一些建議 –

+0

是的,你可以用任何你想要的擴展名來保存。 – jdweng

回答

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); 
} 

(這是很好的編碼習慣使用每IDisposable一個using,而不是手動關閉流。)

+0

我已經通過增加大小來做到這一點,但它沒有幫助我。還有一件事...我下載的文件有PDF擴展名,但是當我將擴展名更改爲html而不是PDF時,它顯示它不是PDF ......可能是由於PDF URL重定向到其他路徑或真正的PDF路徑.....這是無法讀取這些方法,你可以告訴我如何閱讀PDF的真正路徑。 –

+0

@AKay損壞的PDF文件大小是多少?內容是什麼樣的?它是一個可讀的HTML頁面嗎?如果它是公共文件:您是否可以將URL發佈到您嘗試下載的PDF中? – haindl

+0

是的,它是一個可讀的html ...大小比我手動使用瀏覽器Adobe PDF保存的大... URL是一個內部網,不會在外部打開.... URL在末尾有.PDF擴展名如果它 –