How to get file name from content-disposition Ask Question

How to get file name from content-disposition Ask Question

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

ベストアンサー1

以前私が使用した方法は次のとおりです。添付ファイルをサーバー応答として提供していると想定しています。

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

編集:質問に合わせて回答を編集しますinlineattachment

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

詳細はこちら

おすすめ記事