我问this question,现在已经开始工作了。
然而,我仍然得到标题错误,似乎找不到任何解决它的人的任何参考。
这让我疯了!
我的ASHX C#代码看起来像这样;
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.Buffer = true;
context.Response.Charset = "";
context.Response.AddHeader("Content-Disposition", "inline;filename=file.pdf");
context.Response.ContentType = "application/pdf";
Stream fileStream = publishBookManager.GetFile();
byte[] buffer = new byte[32 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
}
context.Response.BinaryWrite(buffer);
context.Response.Flush();
context.Response.Close();
我的jQuery / javascript看起来像;
window.open('/UserControls/download.ashx?format=pdf&bookId=' + bookId, "pdfViewer");
答案 0 :(得分:1)
Acrobat Reader是否升级到最新版本? Acrobat Reader中的文件是否可以与HTTP请求分开?
此外,文件是否大于32K?因为看起来你只能在缓冲区中保存32K,而你正在写出调用者。
答案 1 :(得分:1)
这段代码存在一些问题 - 当可能意图写出你的内存流的内容时,你会写出buffer
的内容,你可以在不使用的情况下处理这些内容 - 但是为什么不做呢
fileStream.CopyTo(context.Response.OutputStream);
答案 2 :(得分:0)
这不是解决方案,而是黑客攻击。它可能对某人有帮助......
当我的用户尝试下载使用直接链接从网站自动生成的PDF时,我收到了相同的错误消息,例如http://example.com/MyFile.pdf。
要解决此问题,我将超链接从http://example.com/MyFile.pdf更改为http://example.com/MyFile.pdf?
(注意链接末尾的问号)
它解决了这个问题。
我不确定它是如何工作的,可能是一个缓存问题!?