Как получить имя файла из content-disposition

Я загрузил файл в качестве ответа ajax. Как получить имя файла и тип файла из content-disposition и отобразить эскиз для него. я получил много результатов поиска, но не смог найти правильный путь.

$(".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

3 ответов


вот как я использовал его некоторое время назад. Я предполагаю, что вы предоставляете вложение в качестве ответа сервера.

я установил заголовок ответа, как это из моей службы REST response.setHeader("Content-Disposition", "attachment;filename=XYZ.csv");

function(response, status, xhr){
    var filename = "";
    var disposition = xhr.getResponseHeader('Content-Disposition');
    if (disposition && disposition.indexOf('attachment') !== -1) {
        var filenameRegex = /filename[^;=\n]*=((['"]).*?|[^;\n]*)/;
        var matches = filenameRegex.exec(disposition);
        if (matches != null && matches[1]) { 
          filename = matches[1].replace(/['"]/g, '');
        }
    }
}

изменить: Редактирование ответа в соответствии с вашим вопросом-использование слова inline вместо attachment

function(response, status, xhr){
    var filename = "";
    var disposition = xhr.getResponseHeader('Content-Disposition');
    if (disposition && disposition.indexOf('inline') !== -1) {
        var filenameRegex = /filename[^;=\n]*=((['"]).*?|[^;\n]*)/;
        var matches = filenameRegex.exec(disposition);
        if (matches != null && matches[1]) { 
          filename = matches[1].replace(/['"]/g, '');
        }
    }
}

здесь


попробуйте это решение:

var header = xhr.getResponseHeader('Content-Disposition');
var startIndex = header.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)

не нашел ответа на stackoverflow в моем случае. Я получаю такой контент-диспозицию:inline; filename * =UTF-8 " Dossier%20de%20diagnostic%20technique.формат PDF

Я изменил регулярное выражение для работы со строкой UTF-8, если она присутствует : var regex = / filename [^;=\n]=(UTF-8 (['"]))?(.*)/;

и вот моя функция :

function getFileNameByContentDisposition(contentDisposition){
    var regex = /filename[^;=\n]*=(UTF-8(['"]*))?(.*)/;
    var matches = regex.exec(contentDisposition);
    var filename;

    if (matches != null && matches[3]) { 
      filename = matches[3].replace(/['"]/g, '');
    }

    return decodeURI(filename);
}

EDIT: я не тестировал его так много. Не забудьте завернуть его с попыткой / поймайте код NodeJS.