web-dev-qa-db-ja.com

content-dispositionからファイル名を取得する方法

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

30
Arun Sivan

これは私がいつか使用した方法です。サーバーの応答として添付ファイルを提供していると仮定しています。

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

編集:質問に合わせて回答を編集します-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, '');
        }
    }
}

詳細はこちら

60
Winter Soldier

この解決策を試してください:

var header = xhr.getResponseHeader('Content-Disposition');
var startIndex = header.indexOf("filename=") + 10; // Adjust '+ 10' if filename is not the right one.
var endIndex = contentDisposition.length - 1; //Check if '- 1' is necessary
var filename = contentDisposition.substring(startIndex, endIndex);
console.log("filename: " + filename)
4
Osvaldo Cabrera

ジョブを実行するnpmパッケージがあります。 content-disposition

0
haxpanel