我正在连接WCS服务,并且必须将带有 XML 的 HTTP POST 请求发送到服务器以检索(二进制)光栅文件。
我设法使用 jQuery ajax 下载了文件,但我无法将实际文件内容保存到本地文件系统。
有什么办法可以做到这一点?最好我想使用浏览器内置的下载管理器来处理下载。
我正在连接WCS服务,并且必须将带有 XML 的 HTTP POST 请求发送到服务器以检索(二进制)光栅文件。
我设法使用 jQuery ajax 下载了文件,但我无法将实际文件内容保存到本地文件系统。
有什么办法可以做到这一点?最好我想使用浏览器内置的下载管理器来处理下载。
是的,可以从 Javascript 保存文件。基本上,它会生成一个包含二进制数据的 blob,然后使用 HTML5“下载”属性创建指向该 blob 的链接以指定所需的文件名,最后模拟单击此链接。
// 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);
}
您应该查看https://stackoverflow.com/a/13059556/2227298以获得有关不支持 HTML5 的浏览器的替代代码的更完整答案 <a download>