2015-03-04 2 views
0

я скачиваю файл в asp.net Вот кодИсключение во время загрузки PDF-файла в asp.net

Response.ContentType = "Application/.pdf"; 
Response.AppendHeader("Content-Disposition", "attachment; filename="+extractFileName+".pdf"); 
Response.TransmitFile(extractFilePath); 
Response.Flush(); 
Response.End(); 

Файл загружается должным образом, но при Response.End(); он бросает следующее исключение:

{Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.}

+0

попробуйте с. удалено из примера типа контента: application/pdf not "Application/.pdf" –

+0

@FrebinFrancis: все тот же ... –

+0

который вы используете? можете ли вы разместить значение в переменной extractFilename? См. Эту ссылку http://www.c-sharpcorner.com/uploadfile/afenster/how-to-download-a-file-in-Asp-Net/ –

ответ

0

Предоставленное сообщение не является исключением, но указывает, что оно не может показать вам ошибку из-за оптимизации, выполняемой компилятором, и из-за текущего местоположения кода.

Попробуйте удалить ответ. И посмотрите, не позволит ли он увидеть ошибку.

0

Существует несколько вопросов.

Я думаю, что основной проблемой будет то, что вы используете extractFileName для имени, которое будет использоваться для открытия/сохранения файла в браузере, а также в качестве физического имени передаваемого файла. Таким образом, вы используете полный путь для content-disposition, когда ему требуется только имя файла ... или вы не даете полный путь для передачи.

Вы также используете неверную MIME Type для PDF, который должен быть application/pdf

(И вы также включают .pdf в конце extractFileName, поэтому я полагаю, переменная делает уже не включает в себя расширение?)

Если extractFileName это полный физический путь к файлу (включая расширение), то попробуйте заменить ...

Response.AppendHeader("Content-Disposition", "attachment; filename="+extractFileName+".pdf"); 

с ...

string contentFileName = System.IO.Path.GetFileName(extractFileName); 
Response.AppendHeader("Content-Disposition", "attachment; filename="+contentFileName); 
0

TransmitFile() не может использоваться для файлов вне структуры каталогов вашего сайта. В этом случае используйте другой способ записи файла в ответ.

Примечание: Если имя файла содержит несколько точек (.) Или символы, такие как запятая (,), некоторые браузеры испортят имя файла. Добавьте дополнительные кавычки к имени файла, чтобы избежать проблем.

Response.AppendHeader("content-disposition", "attachment; filename=\"" + file + "\";"); 
Смежные вопросы