2016-12-02 2 views
11

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

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

+0

Что говорит консоль? – Matthew

+0

Почему вы устанавливаете 'window.location.href =" http: // localhost: 8080/prj/"+ data +"/"+ uiid +"/getfile ";'? Это приведет к тому, что браузер покинет страницу и просто покажет этот URL. Как вы ожидаете отображать уменьшенное изображение для изображения, если вы покинули страницу? Зачем вам нужно имя файла, которое сервер предлагает вам сохранить файл, как для создания миниатюры? – Quentin

+1

Получение имени файла из содержимого - это одна из проблем. Вы не можете получить тип файла из него, по крайней мере, не надежно, для чего предназначен заголовок типа контента. Отображение миниатюр будет получено из данных и является полностью отдельной проблемой. – Quentin

ответ

23

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

Я поставил заголовок ответа, как это от моего 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]*=((['"]).*?\2|[^;\n]*)/; 
     var matches = filenameRegex.exec(disposition); 
     if (matches != null && matches[1]) { 
      filename = matches[1].replace(/['"]/g, ''); 
     } 
    } 
} 

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

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

More here

+0

Ваше регулярное выражение будет совпадать с filenameXXX = ...... или inlineXXXX = .... – Rouliboy

Смежные вопросы