当我第一次测试这段代码时,似乎工作正常,但现在我收到了一个bug。
无法加载PDF文档
我通过我的管理功能上传了一个pdf,它进入了一个数据库,然后我在我的控制器中有一个动作,允许一个人在点击它时下载该pdf。
然而,它似乎并不总是有效。我也无法真正确定导致它破裂的原因。如果文件大小超过78 kb,则Chrome / Edge无法打开文档。如果文件低于75 kb Chrome / IE打开它就好了。我不确定为什么会这样。
我已将控制器包含在
下面public ActionResult DownloadPdf(int Id) {
var dbTest = _testRepository.FindId(Id);
var cd = new System.Net.Mime.ContentDisposition { FileName = dbTest.PdfName, Inline = true };
Response.AddHeader("Content-Disposition", cd.ToString());
return File(dbTest.PdfData, "application/pdf");
}
这是我的观点
@if (Model.Test.HasPdf)
{
<a data-bind="css: { disabled: !form() }" href="@Url.Action("DownloadPdf", "Test", new { Id = Model.Test.Id })" target="_blank" id="launchBtn" class="btn btn-pdf">Download PDF Form</a>
}
有没有其他人有这样的错误?如果是这样,你是如何解决的?
答案 0 :(得分:0)
我明白了。它与我的下载功能无关,它在我的HTTPPost
中if (vm.FileData != null)
{
using (var stream = new System.IO.MemoryStream(vm.FileData.ContentLength\\This code between the parenthesis was missing))
{
vm.FileData.InputStream.CopyTo(stream);
test.FileData = stream.GetBuffer();
test.FileName = vm.FileData.FileName;
}
答案 1 :(得分:-1)
假设你的&#34; dbTest&#34;有一个属性,PDF内容为字节数组(byte [])。
直接下载文件
public ActionResult DownloadPdf(int Id) {
var dbTest = _testRepository.FindId(Id);
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", $"filename={dbTest.PdfName}");
Response.AppendHeader("Content-Length", dbTest.PdfData.Length.ToString(CultureInfo.InvariantCulture));
Response.BinaryWrite(dbTest.PdfData);
Response.End();
return null;
}
或在新的浏览器标签页中打开文件
public ActionResult DownloadPdf(int Id) {
var dbTest = _testRepository.FindId(Id);
return File(dbTest.PdfData, "application/pdf", dbTest.PdfName);
}
我希望这有助于你