2013-09-25 3 views
0

У меня есть веб-приложение в ASP.NET с C#, и у меня возникла проблема с открытием некоторых PDF-файлов.Мои PDF-файлы открываются в Adobe, но не через мой браузер

Код просматривает выбранный идентификатор и вытягивает путь PDF, связанный с этим идентификатором. Возвращаемый путь работает и корректен. По какой-то причине, когда я открываю браузер в браузере, он говорит, что файл поврежден и не может быть восстановлен, но когда я его открываю в Adobe, все идеально.

Вот мой код:

string id; 
string path; 

DataTable dt = Session["UnmatchedItems"] as DataTable; 

ASPxButton button = (ASPxButton)sender; 

id = button.CommandName; 

DataView dv = new DataView(dt); 

dv.RowFilter = "id = " + id; 

path = dv[0][2].ToString(); 

Response.ClearHeaders(); 

Response.ContentType = "application/pdf"; 

Response.AddHeader("Content-Disposition", "attachment; filename=" + path); 

Response.WriteFile(path); 

Не уверен, что происходит и почему он не откроется ...

Если я забыл что-нибудь или вам нужно больше информации, дайте мне знать!

ответ

1

Это то, что работает для меня:

byte[] fileContents = System.IO.File.ReadAllBytes(Server.MapPath("~/" + pathToFile)); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-disposition", "attachment;filename=" + filename); 
Response.OutputStream.Write(fileContents, 0, fileContents.Length); 
+0

Мой путь представляет собой физический путь на клиента сервера/компьютера, поэтому Server.MapPath генерирует исключение, так как он не является допустимым виртуальный путь. – Carson

+0

, то избавитесь от Server.MapPath и просто поместите физический путь в качестве параметра ReadAllBytes. Я просто показал пример, если у вас есть файл в каталоге на вашем веб-сервере в вашем приложении. Процесс aspnet должен иметь права чтения для этого каталога, в котором вы также пытаетесь получить файл. – Steve

+0

У меня такая же ошибка: «Ошибка при открытии этого документа. Файл поврежден и не может быть восстановлен». – Carson