通过JavaScript下载文件时如何设置文件名

6
我已接手以下代码片段:
            $.ajax({
                contentType: 'application/json; charset=utf-8',
                type: 'POST',
                url: '/api/generalapi/generatecsv',
                data: data,
                success: function (response) {
                    window.open("data:text/csv;base64," + response, '', '');
                }
            });

我尝试添加了

filename=orders.csv

使用window.open打开文件时,文件总是以“下载”的形式下来。没有扩展名或其他任何东西。

是否有办法使用上述代码控制文件名?

1个回答

1
尝试使用类似以下的代码:
function saveContent(fileContents, fileName)
{
    var link = document.createElement('a');
    link.download = fileName;
    link.href = 'data:,' + fileContents;
    link.click();
}

    $.ajax({
        contentType: 'application/json; charset=utf-8',
        type: 'POST',
        url: '/api/generalapi/generatecsv',
        data: data,
        success: function (response) {
            saveContent("text/csv;base64," + response, 'orders.csv');
        }
    });

关键部分是link.download = fileName;,它将HTML5 download属性添加到用于下载的动态创建的链接中。

由于这需要在IE中工作,那么我的最佳选择是让后端返回整个文件,从而定义文件名? - CJe
1
确实,IE不支持这个,所以解决的选项是从后端解决。 - Tudor Constantin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接