2016-12-02 36 views
11

I Pobrano plik jako odpowiedź ajax. Jak uzyskać nazwę pliku i typ pliku z dyspozycji treści i wyświetlić miniaturę dla tego pliku. Mam wiele wyników wyszukiwania, ale nie mogłem znaleźć właściwej drogi.Jak uzyskać nazwę pliku z dyspozycji treści?

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

        } 
       }); 

wyjście konsoli: inline; filename=demo3.png

+0

Co mówi konsola? – Matthew

+0

Dlaczego ustawiasz 'window.location.href =" http: // localhost: 8080/prj/"+ data +"/"+ uiid +"/getfile ";'? To spowoduje, że przeglądarka opuści stronę i po prostu wyświetli adres URL. Jak możesz wyświetlić miniaturę obrazu, jeśli opuściłeś stronę? Dlaczego potrzebna jest nazwa pliku, którą serwer sugeruje zapisanie pliku w celu wygenerowania miniatury? – Quentin

+1

Uzyskanie nazwy pliku z dyspozycji treści jest jednym z problemów. Nie można pobrać od niego typu pliku, przynajmniej nie niezawodnie, do czego służy nagłówek typu zawartości. Widok miniatur pochodzi z danych i jest całkowicie oddzielnym problemem. – Quentin

Odpowiedz

23

Oto jak kiedyś użyłem go z powrotem. Zakładam, że dostarczasz załącznik jako odpowiedź serwera.

ustawić nagłówek odpowiedzi jak to z mojej usługi 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: Edycja odpowiedź do własnych wykorzystania pytanie-słowa inline zamiast 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

Twój regexp będzie pasował do nazwy plikuXXX = ...... lub inlineXXXX = .... – Rouliboy