使用角度2重命名保存到文件系统的文件

时间:2017-02-14 14:44:54

标签: file angular typescript blob

我想将从服务器下载的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));
}

1 个答案:

答案 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);
}