【发布时间】:2012-03-27 16:48:38
【问题描述】:
我已经用谷歌搜索过这个,搜索过这个,浏览了 SO 和其他网站(我已经尝试阅读这个问题几个小时了),但我似乎仍然无法找到令人满意的解决方案。一个简单、常见的编程问题。
让我来设置场景:
- 我有一个网站/Web 应用程序,允许用户搜索 SQL Server 库。
- 与搜索结果相关的大部分文档都是PDF文件。
- PDF 文件以 BLOB 形式存储在 SQL Server 数据库中。
- 我希望能够从数据库中动态提取 PDF 并将其显示给用户。
- 为了保留用户的搜索进度,我想我想在另一个浏览器窗口/选项卡中打开文件
- 我已经弄清楚如何将 PDF 保存到服务器的指定目录中。
- 我不希望用户看到文件的路径。
- 在合理的范围内,我想要一个适用于所有主流浏览器的解决方案:
- Internet Explorer
- 火狐
- 铬
- Safari(包括 iPhone/iPad Mobile Safari)
到目前为止,我尝试过的每个解决方案都存在一些基本问题:
- 在 iPhone/iPad 上使用 iFrame 似乎失败了
- 使用 Server.Transfer(我使用的是 ASP.NET)显示乱码而不是 PDF
- 我尝试了几个演示 3rd 方解决方案,但它们也很臭!
我想不通!我真的是一名桌面开发人员,这在 Windows 中是 EASY!为什么网络这么难?
我是傻了,这真的是一个简单的练习,还是这个基本任务真的那么难?
请帮我指出正确的方向!
谢谢!!!
【问题讨论】:
-
我不知道 ASP.NET,但我认为您在使用 Server.Transfer 时出现乱码的原因可能是您没有将响应的内容类型标头设置为
application/pdf- 还是你? :) -
我理解你在说什么(从概念的角度来看),但它对我来说没有意义(从功能的角度来看)。单击指向 PDF 的 标记和执行 Server.Transfer('/file.pdf') 有什么区别?第一个似乎有效,但第二个无效。如果我告诉浏览器加载 PDF 文件,它不应该从文件扩展名中找出 MIME 类型吗?此外,在执行 Server.Transfer 时何时/如何设置内容类型标头? (如果您不是 ASP.NET 开发人员,您可能不知道这一点。)
-
啊,你在做一个Server.Transfer到一个.PDF文件?我以为您正在转移到另一个显示 PDF 内联的 ASP.NET 脚本,就像 Rich Andrews 下面大纲的答案一样。在这种情况下,您需要在脚本中设置内容类型,正如您在他的回答中看到的那样:)
-
是的,如您所见,DotNetUser 的回答让我开始工作(与 Rich Andrews 的回答类似)。不过,我仍然不清楚为什么会出现乱码。为什么当我调用 Server.Transfer 时浏览器不知道显示 PDF?无论如何,谢谢你的回答。
-
我怀疑这是因为 server.transfer 只是替换了从当前 url 返回的内容(就浏览器而言,它保持不变)但是如果您改为 response.redirect,那么浏览器将解释它作为一个新请求并相应地处理它。 developer.com/net/asp/article.php/3299641/…