ASP.NET показывает PDF-файл пользователю вместо диалогового окна «Сохранить как» - PullRequest
1 голос
/ 05 октября 2010

Мое приложение ASP.NET возвращает файл PDF пользователю, используя код ниже

Context.Response.Clear();
Context.Response.ContentType = "application/pdf";
Context.Response.TransmitFile(optionEntityCmd.PathToSave);
Context.Response.End();

Этот код показывает диалоговое окно «Сохранить как», возможно ли вместо диалогового окна «Сохранить как» загрузить файл PDF непосредственно в браузер?

Ответы [ 3 ]

5 голосов
/ 05 октября 2010

Вы можете добавить заголовок Content-Disposition :

Context.Response.AppendHeader(
    "Content-Disposition", 
    "inline; filename=foo.pdf"
);
0 голосов
/ 05 октября 2010

Я не знаю наверняка для классического asp.net, но используя mvc, потоковая передача пользователю делает то, что вы хотите:

MemoryStream stream = PDF.GeneratePDFByStream();
stream.Flush(); //Always catches me out
stream.Position = 0; //Not sure if this is required
return stream;

с

public static MemoryStream GeneratePDFByStream() {
    var doc1 = new Document();
    //use a variable to let my code fit across the page...
    string path = AppDomain.CurrentDomain.BaseDirectory + "PDFs";
    MemoryStream stream = new MemoryStream();
    PdfWriter writer = PdfWriter.GetInstance(doc1, stream);
    writer.CloseStream = false;

    // Actual Writing
    doc1.Open();
    // writing comes here, you will probably just load the PDF in a stream?
    doc1.Close();

    return stream;
}

И ваш контроллер MVC возвращает что-то вроде

return File(GetPDFStream(id), "application/pdf");

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

С макушки головы вы должны получить что-то вроде:

Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.OutputStream.Write( objMemoryStream.ToArray(), 0,        
Convert.ToInt32(objMemoryStream.Length)); 
Response.Flush(); 
try { Response.End(); } catch{}
0 голосов
/ 05 октября 2010

Это динамически создаваемый файл?Если нет, вы можете просто гиперссылку или Response.Rirectirect, я считаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...