我创建了一个方法,可以将pdf创建并保存到项目中的目录中。但是在创建后我无法将此文件下载。我已经尝试了几个我在堆栈溢出和其他许多站点上看到的选项。我可以在firebug的响应中看到PDF内容,我可以手动打开文件,但没有文件下载。请帮忙。
控制器
public class SignatureController : Controller
{
// GET: Signature
public FileContentResult Index(string orderNumber)
{
var pdfFile = DocumentGenerator.GenerateSignedDocument(orderNumber);
byte[] filedata = System.IO.File.ReadAllBytes(pdfFile);
string contentType = MimeMapping.GetMimeMapping(pdfFile);
System.Net.Mime.ContentDisposition cd = new System.Net.Mime.ContentDisposition
{
FileName = pdfFile,
Inline = true,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(filedata, contentType);
}
}
PDF生成器
public static string GenerateSignedDocument(string orderNumber)
{
...............
string currentDate = DateTime.Now.ToString("MMddyyyy");
string fileName = HostingEnvironment.MapPath(pdfTempPath) + orderNumber + currentDate + ".pdf";
pdfDocument.Save(fileName);
return fileName;
}
标题正在返回
缓存控制
私人的
内容处置
附件; filename =“signed document.pdf”
内容编码
gzip的
内容类型
应用程序/ PDF格式
日期
星期四,2015年7月16日16:58:29 GMT
服务器
微软-IIS / 8.0
传输编码
分块
改变
接受编码
X-ASPNET-版本
4.0.30319
X-AspNetMvc-版本
5.2
X供电,通过
ASP.NET
X-SourceFiles
=?UTF-8 2 B 4 QzpcVXNlcnNccmphbWVzXFNvdXJjZVxXb3Jrc3BhY2VzXEN1c3RvbWVyUGlja1VwXEN1c3RvbWVyUGlja1VwLldlYlxTaWduYXR1cmVcSW5kZXg
=?=
答案 0 :(得分:0)
将Inline
设为false
或省略它。这样标头就是attachment
(而不是inline
)。
例如(此示例在文件系统中下载文件)
public FilePathResult DownloadPdf()
{
var cd = new System.Net.Mime.ContentDisposition
{
FileName = "foo.pdf"
//Inline = false //false or omit
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File("~/files/somefile.pdf", "application/pdf");
}
标题如下:Content-Disposition:attachment; filename=foo.pdf
文件名是您设置的 - 样本只是从文件系统获取pdf,因为我没有动态生成(因此您的代码适用于byte
结果)。关键项目是返回正确的标题attachment
- 您甚至可以手动设置
Response.AppendHeader("Content-Disposition", "attachment; filename=" + pdfFile);
而不必使用System.Net.Mime.ContentDisposition
。顺便说一句,你的pdfFile
变量是一个字符串(你将它用作FileName
属性)?
... H个