我想将从服务器下载的blob保存到文件系统中,所以我使用
window.open( window.URL.createObjectURL(myBlob));
保存它。但是当我这样做时,保存的文件会得到一个完全混乱的随机名称。
有没有办法让保存的文件成为我自己的名字?
编辑: 服务器端看起来像这样(Spring Data REST控制器):
@RequestMapping(value = "/downloadFile/{fileName}", method = RequestMethod.GET)
public void downloadFile(@PathVariable(value="fileName") String fileName, HttpServletResponse response) throws IOException {
File file = getMyFile(fileName)
response.addHeader("Content-Disposition", "attachment; filename="+file.getName());
response.setContentType(Files.probeContentType(file.toPath()));
response.setContentLengthLong(file.length());
response.getOutputStream().write(FileUtils.readFileToByteArray(file));
}
答案 0 :(得分:3)
我自己一直在寻找类似的答案,并找到了保存下载文件的几种可能性。
在您的情况下,您可以使用download
元素的<a>
属性:
<a href="bloburl" download="filename"></a>
。您可以在单击按钮时动态添加此元素,并以编程方式执行单击事件。
var a = document.createElement("a"),
fileURL = URL.createObjectURL(blob);
a.style = "display:none";
a.href = fileURL;
a.download = fileName;
window.document.body.appendChild(a);
a.click();
window.document.body.removeChild(a);
URL.revokeObjectURL(fileURL);
download
atrribute仅有最近的支持:http://www.w3schools.com/tags/att_a_download.asp
对于旧版本的IE,请使用
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveOrOpenBlob(blob, fileName);
}