res.attachment()
Webブラウザや他のユーザーエージェントに対して、このレスポンスで送信されるファイルダウンロードを「開く」のではなく、「名前を付けて保存...」するように指示し、オプションでディスクにダウンロードされた新しいファイルの名前を指定します。
具体的には、現在のレスポンスの「Content-Disposition」ヘッダーを「attachment」に設定します。filename
が指定された場合、「Content-Type」はファイルの拡張子(例:.jpg
や.html
)に基づいて自動的に設定され、「Content-Disposition」ヘッダーは「filename=filename
」に設定されます。
res.attachment([filename]);
このメソッドは、ファイルのバイトをストリーミングする前に呼び出す必要があります。
例えば、uploads hookをactions2と組み合わせて使用している場合
fn: async function({id}, exits) {
var file = await LegalDoc.findOne({ id });
if(!file) { throw 'notFound'; }
this.res.attachment(file.downloadName);
var downloading = await sails.startDownload(file.uploadFd);
return exits.success(downloading);
}
以上です!ブラウザでアクセスすると、このアクションでダウンロードされたファイルは、ブラウザで直接開かれるのではなく、新しいファイル(例:「税申告書(Lerangis、2019)」)として保存されます。
内部的には、res.attachment()
は特別なことは何もしていません。単にレスポンスヘッダーを設定しているだけです。
res.attachment();
// -> response header will contain:
// Content-Disposition: attachment
res.attachment('Tax Return (Lerangis, 2019).pdf');
// -> response header will contain:
// Content-Disposition: attachment; filename="Tax Return (Lerangis, 2019).pdf"
// Content-Type: application/pdf