2013-02-22 193 views
1

我正在连接WCS服务,并且必须使用XML向服务器发送HTTP POST请求以检索(二进制)光栅文件。通过POST下载文件

我设法用jQuery ajax下载文件,但我无法将实际的文件内容保存到本地文件系统。

有什么办法可以达到这个目的吗?最好我想使用浏览器内置的下载管理器来处理下载。

+0

目前,它是不可能触发浏览器的默认“保存文件”异步请求对话的浏览器替代码或者设法将发送的文件保存在本地文件系统中。还有一些关于此主题的其他StackOverflow问题。 – marekful 2013-02-22 14:28:36

+0

@MarcellFülöp:我已经搜索过相关的主题,但是我找不到我的问题的完全匹配。另一方面,使用HTML 5应该有办法通过JavaScript将文件保存到本地系统,但我会尽快使用浏览器下载管理器。 – Constantinius 2013-02-22 14:33:30

回答

2

是的,可以从Javascript保存文件。基本上它会生成一个包含二进制数据的blob,然后它会创建一个链接到这个blob和HTML5“download”属性,以指定所需的文件名,最后它模拟点击这个链接。

// Limited browser support! (latest release versions of Firefox & Chrome are OK) 
var DownloadAttributeSupport = 'download' in document.createElement('a'); 
function showSave(data, name, mimetype) { 
    var blob, url, builder = new BlobBuilder(); 
    builder.append(data); 
    if (!mimetype) mimetype = "application/octet-stream"; 
    if (DownloadAttributeSupport) { 
     blob = builder.getBlob(mimetype); 
     url = URL.createObjectURL(blob); 
     var link = document.createElement("a"); 
     link.setAttribute("href",url); 
     link.setAttribute("download",name||"Download.bin"); 
     // Now I need to simulate a click on the link. 
     // IE 10 has the better msSaveBlob method and older IE versions do not support the BlobBuilder interface 
     // and object URLs, so we don't need the MS way to build an event object here. 
     var event = document.createEvent('MouseEvents'); 
     event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null); 
     link.dispatchEvent(event); 
} 

你shoudlk看https://stackoverflow.com/a/13059556/2227298一个更完整的答案对于不支持HTML5 <下载>