我在这里指定了非常相似的要求.
我需要让用户的浏览器手动开始下载 $('a#someID').click();
但我无法使用该window.href方法,因为它将当前页面内容替换为您尝试下载的文件.
相反,我想在新窗口/选项卡中打开下载.这怎么可能?
我有以下代码下载.csv文件:
$.ajax({
url: urlString,
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
success: function(data) {
if (data) {
var iframe = $("<iframe/>").attr({
src: data,
style: "visibility:hidden;display:none"
}).appendTo(buttonToDownloadFile);
} else {
alert('Something went wrong');
}
}
});
Run Code Online (Sandbox Code Playgroud)
的urlString指向到生成RESTful服务.csv文件,并返回其被分配给用于所述iFrame的src属性的文件路径.这适用于任何.csv文件,但我遇到.xml文件问题.
当我使用相同的代码但更改contentType为text/xml并使用它来下载.xml文件时,这不起作用.
我可以在这里使用相同的方法来处理.xml文件吗?
更新:
感谢Ben指出了正确的方向.事实证明我根本不需要ajax调用.相反,我可以使用iFrame及其url属性来调用Web服务,它将生成内容,添加header(Content-Disposition)并返回流.
我正在使用webRTC开发FileShare应用程序.我想用JavaScript/HTML实现客户端.代码应该在客户端浏览器上运行.我需要在通过webRTC下载时保存它们.文件可能非常大,我无法完全卸载它们并将它们保存在数组或blob中,然后将它们作为文件保存到磁盘.
是否有任何API允许我在收到文件时将文件保存在块中?
到目前为止我找到了Downloadify,FileSave.js和html5 FileWriterApi.虽然前两个没有分块并且要求我在保存之前首先将完整文件下载到内存,但FileWriterAPI在大多数浏览器上都不可用.
我正在使用WebRTC将文件发送到已连接的对等方,并且正在将文件分块发送。但是,我在弄清楚如何让对等方逐块地流式传输时保存/下载文件时遇到了麻烦。
我在网上找到的所有示例都建议这样做:
// sender
dataConnection.send({
'file': file
});
// receiver
dataConnection.on('data', function(fileData) {
var dataView = new Uint8Array(fileData);
var dataBlob = new Blob([dataView]);
var url = window.URL.createObjectURL(dataBlob);
// create <a>
var link = document.createElement('a');
link.href = url;
link.download = fileName;
document.body.appendChild(link);
// trigger the download file dialog
link.click();
}
Run Code Online (Sandbox Code Playgroud)
但是,这种方法不支持获取文件的大块并在出现每个大块时对其进行写...它必须等待整个文件在发送方读取并发送到接收方。
我想做的是这样的:
// sender
for (var i = 0; i < fileSize; i += chunkSize) {
var fileReader = new FileReader();
// read next chunk
var blob = file.slice(start, end);
... …Run Code Online (Sandbox Code Playgroud)