2017-10-18 171 views
0

我有一个web服务,它以.json扩展名的形式向请求浏览器返回一个文件。例如:从服务器响应中下载文件并将url作为.json文件

https://somesite/rest/directories/output/_ags_SessionFile_f46fd461-b437-11e7-9dc1-005056bd201b.json

这样做的目的是简单地浏览这个URL并且调用“另存为”或直接保存文件以.json的下载目录。

这适用于大多数情况下,但是在没有.json文件类型关联到IE的计算机上(在ControlPanel中找到 - >默认程序),那么文件不会下载,或者用户提示时使用SaveAs选项,浏览器窗口打开,页面中显示.json文件的内容。

我有点不确定如何搜索这样的事情,即使这篇文章可能不够充分,因为我根本没有遇到过这个问题。

function downloadFile(results, messages) { 
 
        
 
        //set a var of the complete url address that is returned from the GP service request 
 
        var urlOfFile = results[0].value.url; 
 
        
 
        //get the div from the html of the widget 
 
        link = document.getElementById('downloadSession'); 
 

 
        link.setAttribute('href', urlOfFile); 
 
        link.click(); 
 

 
       }

<div> 
    <a id="downloadSession" href="" target="_blank"></a> 
</div> 

回答

1

添加HTML5 download属性的<a>标签应该为你

Anchor Tag doc

下载HTML5

工作

此属性指示浏览器下载,而不是导航到它的URL,因此用户将被提示将其保存为本地文件

该文档还指出了一些陷阱一样,只会对same-工作起源网址和其他一些内容,因此值得一读。

不幸的是,download属性不会在Internet Explorer支持这样的下载正常工作,你将不得不从服务器的响应添加Content-TypeContent-Disposition

他们应该是这个样子:

Content-Type: application/octet-stream 
Content-Disposition: attachment;filename=\"filename.json\" 
+0

我真的不明白如何实现EXA在那个页面上。帆布?谢谢您的意见! – user2309282

+0

我建议用'' –

+0

替换''啊,我明白了。谢谢你会尝试! – user2309282

0

添加标题:

header('Content-disposition: attachment; filename=file.json'); 
header('Content-type: application/json'); 
echo $json; 
+0

将它添加到哪里? .js代码包含在一个小部件中,该小部件在较大的index.html容器中拥有它自己的.html。 – user2309282