【问题标题】:Returning PDF as FileContentResult from byte array produces invalid file从字节数组返回 PDF 作为 FileContentResult 会产生无效文件
【发布时间】:2020-09-08 23:29:10
【问题描述】:

我需要一个用于在浏览器中下载或查看 pdf 的链接。我几乎尝试了所有解决方案,但下载 pdf 文件后,文件似乎已损坏。

我的控制器:

public ActionResult DownloadKalite(Guid oid)
{
    string contentType = "application/pdf";
    List<KaliteDokumanlari> kalite = db.KaliteDokumanlari.Where(a => a.Oid == oid && a.GCRecord == null).ToList();

    string filename = kalite.Select(y => y.FileData.FileName).FirstOrDefault();
    byte[] filearray = kalite.Select(y => y.FileData.Content).FirstOrDefault();

    return File(filearray, contentType, filename);
}

我的下载链接在视图中:

<div id="panel3d">
    @foreach (var doc in item.KaliteDokumanlari)
    {
        <div>
           @Html.ActionLink(doc.FileData.FileName, "DownloadKalite", new { @oid = doc.Oid })
        </div>
    }
</div>

下载pdf后似乎没问题 PDF Error

【问题讨论】:

  • 建议:如果您将PDF文件存储在一个目录中并将其路径保存到数据库中,您将更容易管理文件。

标签: c# .net asp.net-mvc downloadfile


【解决方案1】:

尝试将字节放入 MemoryStream

var pdfStream= new MemoryStream();    
pdfStream.Write(filearray , 0, filearray .Length);  
pdfStream.Position = 0; 

return File(pdfStream, contentType, filename);

如果这不起作用,请将 pdf 存储为 base64 字符串以避免字节丢失。

【讨论】:

  • 还是和内存流一样。 Pdf 无法打开。而且我不应该更改数据库列类型导致该数据库被另一个项目使用。
  • 您能否提供存储这些字节的方式。这就是给你带来麻烦的原因。
【解决方案2】:

感谢您的帮助。我明白我的问题。我用 xaf 创建了数据库。并且 xaf 将字节存储为组合。现在它正在工作,我分解字节

【讨论】:

    猜你喜欢
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    相关资源
    最近更新 更多