2016-10-05 2 views
-4

Проблема все еще существует, когда я пытался использовать три метода.pdf поврежден при загрузке с URL-адреса VB.net/C#

  1. Использование окна API "URLDownloadToFile"
  2. WebClient Метод webclient.DownloadFile (URL, Dest) '' С/Без credientials
  3. HTTP WebRequest Метод:

государственной статической силы Скачать (Строка 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(); 
    } 

Sti ll i m сталкивается с проблемой, файл, который я могу загрузить в своей локальной системе, но когда я открываю, что он показывает Corrupt pdf. !!!! Я просто хочу скачать pdf-файл из URL-адреса, и мой запрос в VB.net/C# не использует метод ответа ASP.net. Пожалуйста, помогите, если кто-то столкнется с этой реальной проблемой.

Спасибо заранее!

+0

Попробуйте это: StreamWriter Fstr = новый StreamWriter (strFileSaveFileandPath , true, Encoding.UTF8); – jdweng

+0

Я тоже попробовал этот, не помог мне, теперь я заметил, что путь URL, который я запрашиваю для загрузки PDF, также перенаправлен на другой путь ... означает, что загруженный файл не является PDF-файлом во всех его html, I может открыть его путем расширения расширения из PDF в html. Надеюсь, что это поможет вам предложить –

+0

Да, вы можете сохранить любое расширение. – jdweng

ответ

1

Ваш код записывает только 100 000 байт загруженного PDF и, следовательно, каждый PDF, размер которого превышает 100000 байт, поврежден.

Чтобы прочитать больше байтов, вы должны написать содержимое каждого буфера в 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 вместо того, чтобы вручную закрыть потоки.)

+0

Я уже сделал это, увеличив размер, но мне это не помогло. Еще одна вещь ... файл, который я загрузил, имеет расширение PDF, но когда я меняю расширение на html, это показывает, что он вообще не PDF. Возможно, это связано с URL-адресом PDF, перенаправленным на какой-то другой путь или реальный путь PDF ....., который не может прочитать этим методом, вы можете просто сказать мне, как читать этот реальный путь PDF. –

+0

@AKay Каков размер файла поврежденного PDF-файла? И как выглядит содержимое? Это читаемая страница HTML? И если это общедоступный файл: можете ли вы разместить URL-адрес в PDF-файле, который вы пытаетесь загрузить? – haindl

+0

Да, это читаемый html ... размер больше, чем тот, который я просто сохраняю с помощью браузера Adobe PDF вручную ... URL-адрес интрасети, который не открывается снаружи. URL-адрес получил расширение .PDF в конце, если оно –

Смежные вопросы