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
これは私がいつか使用した方法です。サーバーの応答として添付ファイルを提供していると仮定しています。
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, '');
}
}
}
この解決策を試してください:
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)
ジョブを実行するnpmパッケージがあります。 content-disposition