当前位置:  开发笔记 > 编程语言 > 正文

C#BinaryWrite over SSL

如何解决《C#BinaryWriteoverSSL》经验,为你挑选了1个好方法。

我正在尝试使用存储在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 ...等)



1> 小智..:

我只是设法通过替换来解决这个问题

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();

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有