2016-12-02 5 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

は私がいつか戻ってそれを使用する方法です。 添付ファイルをサーバーの応答として提供しているとします。 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するのではなく、単語inlineのごquestion-の使用に合わせて答えを編集 :

は、私は私の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からこのようなレスポンスヘッダを設定します

+0

正規表現はfilenameXXX = ......またはinlineXXXX = ....と一致します。 – Rouliboy

関連する問題