首页 > 解决方案 > 使用 javascript 生成要下载的文件。如何使用没有 HTTP 标头的“另存为”对话框?

问题描述

我正在使用此功能下载文件:

function download(fileName, data) {
    fileName = fileName.replace(/\s+/gi, '_').replace(/[^a-zA-Z0-9-.,_]/gi, '');
    let blob = new Blob([data], {type: 'text/plain'});
    if(window.navigator.msSaveOrOpenBlob){
        window.navigator.msSaveBlob(blob, fileName);
    }else{
        let elem = window.document.createElement('a');
        elem.href = window.URL.createObjectURL(blob);
        elem.download = fileName;
        document.body.appendChild(elem);
        elem.click();
        document.body.removeChild(elem);
    }
}

// Example usage
$('button').on('click', function(){
    download("test.txt", "test");
});

它工作得很好。但是,似乎将文件直接下载到“下载”文件夹中。我怎样才能让它打开一个“另存为”对话框,以便用户可以选择他喜欢的下载位置?

JSFiddle:https ://jsfiddle.net/kbwrcL14/

我之前已经看到过有关像设置 a 那样操作标头的建议Content-Disposition- 但是,当您即时生成文件时,这可能吗?Afaik headers 是在 HTTP body 之前发送的,但是当 JS 代码运行时,整个 HTTP 请求已经完成,文件是由客户端自己生成的。

有没有办法在不使用 http 标头的情况下完成这项工作?

标签: javascript

解决方案


推荐阅读