我写了一个演示应用程序来玩一下:
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...')
});
你好.json:
{
"food": "pizza",
"cost": "$10"
}
仅使用 HTTP 标头,我相信这只是特定于浏览器的。本质上,发生的事情是res.attachment
功能是设置Content-Disposition
HTTP 服务器标头attachment
。某些浏览器(例如 Firefox)会提示您“另存为”。 Chrome 和 Safari 默认情况下不会。但是,您可以在 Chrome 或 Safari 的选项中更改此默认行为。我没有在 Internet Explorer 中进行测试。
我尝试改变Content-Type
看看这是否会覆盖任何行为,但事实并非如此。
简而言之,您将无法覆盖用户的设置。
您可以在这里查看更多内容:如何在流式传输 PDF 附件时强制显示“另存为”对话框 https://stackoverflow.com/questions/9474553/how-to-force-a-save-as-dialog-when-streaming-a-pdf-attachment