私はこれで少し遊ぶためのデモアプリを書きました:
app.js:
var express = require('express')
, http = require('http')
, path = require('path')
, fs = require('fs')
var app = express();
var data = JSON.parse(fs.readFileSync('hello.json'), 'utf8')
app.get('/hello.json', function(req, res) {
res.attachment('hello.json')
//following line is not necessary, just experimenting
res.setHeader('Content-Type', 'application/octet-stream')
res.end(JSON.stringify(data, null, 2), 'utf8')
})
http.createServer(app).listen(3000, function(){
console.log('Listening...')
});
hello.json:
{
"food": "pizza",
"cost": "$10"
}
HTTPヘッダーだけで、これはブラウザ固有のものだと思います。基本的に、何が起こっているのかというと、res.attachment
関数はContent-Disposition
HTTPサーバーヘッダーをに設定していますattachment
。Firefoxなどの一部のブラウザでは、「名前を付けて保存」するように求められます。ChromeとSafariはデフォルトではありません。ただし、このデフォルトの動作は、ChromeまたはSafariのいずれかのオプションで変更できます。InternetExplorerではテストしていません。
を変更してContent-Type
、動作がオーバーライドされるかどうかを確認しようとしましたが、オーバーライドされません。
つまり、ユーザーの設定を上書きすることはできません。
詳細については、こちらをご覧ください:PDF添付ファイルをストリーミングするときに[名前を付けて保存]ダイアログを強制する方法