【问题标题】:How do I download a file with a non-HTML content type from within a browser?如何从浏览器中下载具有非 HTML 内容类型的文件?
【发布时间】:2009-03-20 05:20:05
【问题描述】:

我正在尝试使用内容协商在 HTTP 服务器上提供资源的 HTML 和 RDF/XML 表示。在服务器端这是有效的,即

curl -H "Accept: application/rdf+xml" http://localhost:8182/ontologies/1

将检索正确的版本。我也可以用 JavaScript/Dojo 做同样的事情:

function downloadOntologyRDF(ontologyId) {
    dojo.xhrGet( {
        url:"${baseUrl}/ontologies/" + ontologyId,
        headers: {"Accept": "application/rdf+xml"},
        timeout: 5000,
        load: function(response, ioArgs) {
            var preNode = document.createElement("pre");
            preNode.appendChild(document.createTextNode(response));
            var foo = new dijit.Dialog({
                title: "RDF",
                content: preNode,
                style: "overflow: auto;"
            });
            foo.show();
            return response;
        },
        error: function(response, ioArgs) {
            alert("Retrieving the RDF version failed: " + response);
            return response;
        }
    });
}

这将在弹出对话框中显示结果。我被卡住的地方是为用户提供了一种下载此版本的方法。我想在页面上有一个链接,可以在浏览器中将 RDF 显示为页面或直接打开保存对话框。在不借助查询参数或其他技巧的情况下,这是否可能?

【问题讨论】:

  • 我怀疑除了查询参数之类的服务器端东西之外别无他法

标签: browser download mime-types content-negotiation


【解决方案1】:

就像 cobbal 提到的 - 由于您不能在 URL 本身中设置 Accept 标头,因此您应该有额外的内容协商机制。一些框架允许在表单中设置内容类型

http://example.com/resource;format

在 URL 的末尾有 format,用分号分隔。然后在处理请求时,解析出格式部分。

你的情况可能是这样的

http://localhost:8182/ontologies/1;rdf

到服务器 rdf,并且没有指定格式来提供您接受标头中的任何内容。

【讨论】:

  • 这对我来说归类为“查询参数和其他技巧”;-) 但是让我接受这个答案作为“否”的长版本。
  • 在撰写本文时,我认为分号是个好主意,但它带来了更多麻烦,而且在业务中没有太多优雅 - 你必须解析它或在路由表中配置它会变得讨厌快速地。最后对我来说,我使用了一个参数 localhost:8182/ontologies/1?format=rdf
【解决方案2】:

这个页面解释了如何设置一个在浏览器中显示 RDF 的 aspx 页面。它可能会帮助你。虽然我不能确定,因为您已经指定了您在服务器上运行的内容。

Building an RSS feed made simple

【讨论】:

  • 我正在使用 Java/Restlets,但这没关系:服务器端已经按照 curl/JS 示例显示的那样做。 RSS 提要被认为是具有自己 URL 的单独资源,我尝试做的是使用内容协商来检索同一资源的不同变体。
猜你喜欢
  • 2012-03-28
  • 2013-06-26
  • 2014-07-16
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 2018-06-26
  • 1970-01-01
相关资源
最近更新 更多