Как получить имя файла из 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.