gpt4 book ai didi

asp.net - 尝试使用 asp.net 流式传输 PDF 文件会产生 "damaged file"

转载 作者:行者123 更新时间:2023-12-02 16:08:40 30 4
gpt4 key购买 nike

在我的一个 ASP.NET Web 应用程序中,我需要隐藏向用户提供的 pdf 文件的位置。

因此,我正在编写一种方法,从 CMS 系统上的位置检索其二进制内容,然后将字节数组刷新给 Web 用户。

不幸的是,我在下载流时遇到错误:“无法打开文件,因为它已损坏”(或在 adobe reader 中打开文件时类似的情况)。

问题1:我做错了什么?问题2:我可以使用这种方法下载大文件吗?

    private void StreamFile(IItem documentItem)
{
//CMS vendor specific API
BinaryContent itemBinaryContent = documentItem.getBinaryContent();
//Plain old .NET
Stream fileStream = itemBinaryContent.getContentStream();
var len = itemBinaryContent.getContentLength();
SendStream(fileStream, len, itemBinaryContent.getContentType());
}

private void SendStream(Stream stream, int contentLen, string contentType)
{
Response.ClearContent();
Response.ContentType = contentType;
Response.AppendHeader("content-Disposition", string.Format("inline;filename=file.pdf"));
Response.AppendHeader("content-length", contentLen.ToString());
var bytes = new byte[contentLen];
stream.Read(bytes, 0, contentLen);
stream.Close();
Response.BinaryWrite(bytes);
Response.Flush();
}

最佳答案

这是我使用的一个方法。这会传回一个附件,因此 IE 会生成一个“打开/保存”对话框。我也碰巧知道文件不会大于 1M,所以我确信有一种更简洁的方法来做到这一点。

我对 PDF 也有类似的问题,我意识到我绝对必须使用二进制流和 ReadBytes。任何带有字符串的东西都会弄乱它。

Stream stream = GetStream(); // Assuming you have a method that does this.
BinaryReader reader = new BinaryReader(stream);

HttpResponse response = HttpContext.Current.Response;
response.ContentType = "application/pdf";
response.AddHeader("Content-Disposition", "attachment; filename=file.pdf");
response.ClearContent();
response.OutputStream.Write(reader.ReadBytes(1000000), 0, 1000000);

// End the response to prevent further work by the page processor.
response.End();

关于asp.net - 尝试使用 asp.net 流式传输 PDF 文件会产生 "damaged file",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1300729/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com