我有一个运行aspx的网络应用程序,它有点像遗留应用程序。在提交期间,用户将支持文档(通常是转换为pdf的图片)上传到我们的sql server,在那里它们作为二进制文件存储,并且可以在批准期间的不同时间再次下载。
然而,我们刚刚开始遇到一个问题,我们的用户无法在adobe中打开pdf并得到可怕的“文件已损坏且无法修复”。错误信息。它们仍然可以在MS Edge中打开,因此它们实际上并未损坏。我已经确认pdf可以在上传前正常打开。
HttpPostedFile file = this.attachmentUploader.PostedFile;
if (file == null)
{
file = Session["postedFile"] as HttpPostedFile;
}
if (file != null)
{
var fileName = this.attachmentUploader.FileName;
fileName = fileName.Length >= 100 ? string.Concat(fileName.Substring(0, 50).Trim(), ".pdf") : fileName;
Attachment attachment = new Attachment()
{
FileName = fileName,
File = this.attachmentUploader.FileBytes
};
db.Attachments.Add(attachment);
db.SaveChanges();
}
这是下载代码
byte[] file = null;
// Code here to pull file from db
if (file != null)
{
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=support_doc.pdf");
Response.OutputStream.Write(file, 0, file.Length);
}
任何帮助表示赞赏!
答案 0 :(得分:0)
下载的文件实际上包含两个连接文件,即实际PDF和HTML文件。
HTML文件的大小接近70 KB,如果没有外部JavaScript和图像,它看起来像这样:
[---出于隐私原因删除图片---]
我假设在您的“下载代码”之后,其他一些代码会将此HTML添加到输出中。
您可能希望搜索该代码,或者您可能只想关闭Response.OutputStream
并在Response.OutputStream.Write(file, 0, file.Length)
之后立即完成回复。
根据PDF规范,PDF处理器必须从其末端开始读取PDF,其中存在交叉引用信息,但就文件而言,就PDF语法而言,有近70 KB的垃圾。
因此,任何PDF查看器都可以拒绝该文件为无效。