我正在尝试使用存储在MSSQL varbinary(MAX)字段中的PDF回复客户端.响应通过http连接在我的localhost和测试服务器上运行,但不能通过https连接在生产服务器上运行.我只使用一个简单的BinaryWrite(下面的代码).
byte[] displayFile = DatabaseFiles.getPdfById(id); Response.ContentType = "application/pdf"; Response.BinaryWrite(displayFile);
没什么好看的.只需获取二进制数据,设置内容类型,然后写回客户端.为了以这种方式回复https,是否有任何特殊需要做的事情?
编辑:通过不起作用,我的意思是我在浏览器中得到一个空白文档.Acrobat不会在浏览器中加载.
编辑:我只是注意到这个问题只发生在IE 7中.在Firefox 3中正确加载PDF.我们的客户端专门使用IE 7(优于IE 6,我说服他们升级...大声笑).
编辑:尝试添加标题"content-disposition"以使文件充当附件.浏览器无法在SSL下加载IE错误"Internet Explorer无法从ProductionServer.net下载displayFile.aspx".(以下代码)
byte[] displayFile = DatabaseFiles.getPdfById(id); Response.Clear(); Response.AddHeader("content-disposition", String.Format("attachment;filename={0}", fileName)); Response.ContentType = "application/pdf"; Response.BinaryWrite(displayFile);
编辑:如果在生产服务器上通过http查看文件,浏览器将显示PDF的代码,就像通过NotePad查看一样.(例如%PDF-1.4%â€6 0 obj <> endobj xref 6 33 ...等)
我只是设法通过替换来解决这个问题
Response.Clear();
同
Response.ClearContent(); Response.ClearHeaders();
整个事情看起来像:
byte[] downloadBytes = doc.GetData(); Response.ClearContent(); Response.ClearHeaders(); Response.Buffer = true; Response.ContentType = "application/pdf"; Response.AddHeader("Content-Length", downloadBytes.Length.ToString()); Response.AddHeader("Content-Disposition", "attachment; filename=myFile.pdf"); Response.BinaryWrite(downloadBytes); Response.Flush(); Response.End();