我想让浏览器从服务器下载PDF文档,而不是在浏览器中打开文件。我正在使用C#。
下面是我使用的示例代码。它不起作用..
string filename = "Sample server url";
response.redirect(filename);
答案 0 :(得分:32)
您应该查看“Content-Disposition”标题;例如,将“Content-Disposition”设置为“attachment; filename = foo.pdf”将提示用户(通常)使用“另存为:foo.pdf”对话框,而不是打开它。但是,这需要来自进行下载的请求,因此在重定向期间无法执行此操作。但是,ASP.NET为此提供了Response.TransmitFile
。例如(假设您没有使用MVC,它有其他首选选项):
Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
Response.TransmitFile(filePath);
Response.End();
答案 1 :(得分:4)
如果您要渲染文件以便将其保存在最终而不是在浏览器中打开,则可以尝试以下代码段:
//create new MemoryStream object and add PDF file’s content to outStream.
MemoryStream outStream = new MemoryStream();
//specify the duration of time before a page cached on a browser expires
Response.Expires = 0;
//specify the property to buffer the output page
Response.Buffer = true;
//erase any buffered HTML output
Response.ClearContent();
//add a new HTML header and value to the Response sent to the client
Response.AddHeader(“content-disposition”, “inline; filename=” + “output.pdf”);
//specify the HTTP content type for Response as Pdf
Response.ContentType = “application/pdf”;
//write specified information of current HTTP output to Byte array
Response.BinaryWrite(outStream.ToArray());
//close the output stream
outStream.Close();
//end the processing of the current page to ensure that no other HTML content is sent
Response.End();
但是,如果要使用客户端应用程序下载文件,则必须使用WebClient class。
答案 2 :(得分:3)
我通过将内联参数设置为true来使用它,它将在浏览器中显示为false,它将在浏览器中显示另存为对话框。
public void ExportReport(XtraReport report, string fileName, string fileType, bool inline)
{
MemoryStream stream = new MemoryStream();
Response.Clear();
if (fileType == "xls")
report.ExportToXls(stream);
if (fileType == "pdf")
report.ExportToPdf(stream);
if (fileType == "rtf")
report.ExportToRtf(stream);
if (fileType == "csv")
report.ExportToCsv(stream);
Response.ContentType = "application/" + fileType;
Response.AddHeader("Accept-Header", stream.Length.ToString());
Response.AddHeader("Content-Disposition", String.Format("{0}; filename={1}.{2}", (inline ? "Inline" : "Attachment"), fileName, fileType));
Response.AddHeader("Content-Length", stream.Length.ToString());
//Response.ContentEncoding = System.Text.Encoding.Default;
Response.BinaryWrite(stream.ToArray());
Response.End();
}
答案 3 :(得分:0)
在大多数情况下它们几乎相同,但存在差异:
添加标题将使用相同的键替换上一个条目
追加标题不会替换密钥,而是添加另一个。
答案 4 :(得分:0)
如果我们要写一个字节数组,那么可以使用下面的一个。
Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=file.pdf");
Response.BufferOutput = true;
Response.AddHeader("Content-Length", docBytes.Length.ToString());
Response.BinaryWrite(docBytes);
Response.End();