2016-11-24 7 views
0

Я унаследовал приложение .net, которое позволяет пользователям загружать pdf-файл. Теперь я могу загрузить файл pdf, когда я запускаю локально, но когда я развертываю сервер IIS, у меня возникают проблемы. Загрузка работает в Firefox, но не работает в Chrome, а иногда и в IE. Тот факт, что я могу загрузить его в моей локальной среде разработки, говорит о том, что это может быть что-то с конфигурацией IIS или, возможно, с моим кодом. PDF хранится в таблице ms sql server 2012 как varbinary. Я привел некоторый код ниже, который используется для чтения данных. Пожалуйста, дайте мне знать, если вам нужна другая информация. Кроме того, я проверил журналы iis, и я получаю 200 кодов статуса для всего. Ничто не выделяется там.Ошибка сети Fail Загрузка PDF с помощью iis

if(Session["DetailID"] != null) 
{ 
    //get the file 
    DataTable dt = sp_Attachment_Download(lblAttachmentIDD.Text); 
    DataRow row = dt.Rows[0]; 

    string name = (string)row["AFileName"]; 
    string contentType = (string)row["AFileType"]; 
    Byte[] data = (Byte[])row["AFile"]; 

    /// Send the file to the browser 
    Response.AddHeader("Content-type", contentType); 
    Response.AddHeader("Content-Disposition", "attachment; filename=" + name); 
    Response.BinaryWrite(data); 
    Response.Flush(); 
    Response.Close(); 
} 

EDITED ---------- Я использую инструменты для разработчиков IE и Chrome и нашел что-то интересное. Chrome дает мне следующую ошибку, когда я нажимаю на ссылку:

interpreted as Document but transferred with MIME type application/pdf: 

IE не дает ошибки, но что-то привлекло мое внимание. I мой заголовок REQUEST, ACCEPT не содержит application/pdf, а RESPONSE Content-Type имеет приложение/pdf. Может ли это быть чем-то? Как я могу установить ACCEPT для включения приложения/pdf на страницу aspx?

+0

Я также столкнулся с подобной проблемой, загрузка завершилась с ошибкой в ​​Chrome с сообщением Failed-Network Error. Но я заметил, что проблема связана с протоколами, Chrome использовал HTTP/2, в то время как Firefox использовал HTTP/1.1. Вы это заметили? – KiKMak

ответ

0

У меня была подобная проблема при загрузке PDF из хром, так как в моем случае имя файла содержало в нем запятую, и хром, по-видимому, не понравился, поэтому я удалил запятую из имени файла, и это сработало. PS: Пожалуйста, постарайтесь не использовать Response.Close(). Он прерывает поток и генерирует исключение.

Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-disposition", "attachment; filename=" + fileName.Replace(",",,"); 
Response.CacheControl = "No-cache"; 
Response.Write(data); 
Response.Flush(); 
Response.SuppressContent = true; 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 
+0

Это не сработало. по-прежнему получили ту же ошибку. Благодарю. –

0

Возможно, это поможет, вот мой код, чтобы сделать то же самое. Одна вещь, которую я заметил, это то, что вы не указали длину файла, которая, как мне кажется, требуется. Обратите внимание, что pFileData является классом, который содержит FileName, строку и FileData, байт [].

 System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response; 
     Response.Clear(); 
     Response.ClearHeaders(); 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("Content-Disposition", "attachment;filename=" + pFileData.FileName); 
     Response.AddHeader("Content-Length", pFileData.FileData.Length.ToString()); 
     Response.BufferOutput = false; 
     Response.BinaryWrite(pFileData.FileData); 
     Response.Flush(); 
     Response.SuppressContent = true; 
     HttpContext.Current.ApplicationInstance.CompleteRequest(); 
     Response.End(); 

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

  • Нет связанных вопросов^_^