关于javascript:如何从内容处置中获取文件名

How to get file name from content-disposition

我下载了文件作为ajax的响应。 如何从内容处置中获取文件名和文件类型并显示其缩略图。 我有许多搜索结果,但找不到正确的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$(".download_btn").click(function () {
    var uiid = $(this).data("id2");

    $.ajax({
        url:"http://localhost:8080/prj/" + data +"/" + uiid +"/getfile",
        type:"GET",
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(textStatus, errorThrown);
        },
        success: function (response, status, xhr)
        {
            var header = xhr.getResponseHeader('Content-Disposition');
            console.log(header);    
        }
    });

控制台输出:inline; filename=demo3.png


这是我有时使用它的方式。
我假设您将附件作为服务器响应提供。

我从REST服务response.setHeader("Content-Disposition","attachment;filename=XYZ.csv");这样设置响应头

1
2
3
4
5
6
7
8
9
10
11
12
13
function(response, status, xhr){
    var filename ="";
    var disposition = xhr.getResponseHeader('Content-Disposition');
    if (disposition && disposition.indexOf('attachment') !== -1) {
        var filenameRegex = /filename[^;=\
]*=((['"]).*?\\2|[^;\
]*)/;
        var matches = filenameRegex.exec(disposition);
        if (matches != null && matches[1]) {
          filename = matches[1].replace(/['
"]/g, '');
        }
    }
}

编辑:
编辑答案以适合您的问题-使用单词inline代替attachment

1
2
3
4
5
6
7
8
9
10
11
12
13
function(response, status, xhr){
    var filename ="";
    var disposition = xhr.getResponseHeader('Content-Disposition');
    if (disposition && disposition.indexOf('inline') !== -1) {
        var filenameRegex = /filename[^;=\
]*=((['"]).*?\\2|[^;\
]*)/;
        var matches = filenameRegex.exec(disposition);
        if (matches != null && matches[1]) {
          filename = matches[1].replace(/['
"]/g, '');
        }
    }
}

这里更多


或者只是:

1
var fileName = xhr.getResponseHeader('Content-Disposition').split("filename=")[1];


试试这个解决方案:

1
2
3
4
5
var contentDisposition = xhr.getResponseHeader('Content-Disposition');
var startIndex = contentDisposition.indexOf("filename=") + 10; // Adjust '+ 10' if filename is not the right one.
var endIndex = contentDisposition.length - 1; //Check if '- 1' is necessary
var filename = contentDisposition.substring(startIndex, endIndex);
console.log("filename:" + filename)

有一个npm包可以完成这项工作:content-disposition


这是对marjon4答案的改进。

所选答案的一种简化方法是使用split这样的方法;

1
var fileName = xhr.getResponseHeader('content-disposition').split('filename=')[1].split(';')[0];