2016-12-02 61 views
11

I作爲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, ''); 
     } 
    } 
} 

編輯: 編輯答案,以滿足您question-使用這個詞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