[英]How to implement a file download with Node.js's fs module and express
[英]How to implement file download functionality using Node.js and express, so that the user is prompted to save the file?
基本上我想有一個按鈕,人們可以點擊導出一些數據。 目前我已將其連接到ajax調用,該調用觸及我在服務器上獲取數據的一些代碼。 不幸的是,用戶永遠不會被提示保存文件或任何東西,只是成功地進行了呼叫。
如果我查看對ajax調用的響應,它有我想要導出的JSON。 這是我到目前為止提出的代碼:
#exportData is just a function that gets data based off of a surveyId
@exportData req.body.surveyId, (data) ->
res.attachment('export.json')
res.end(JSON.stringify(data),'UTF-8')
有什么建議讓這個提示用戶保存文件而不是只是靜靜地返回數據?
我寫了一個演示應用程序來玩這個:
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的選項中更改此默認行為。 我沒有在Internet Explorer中測試。
我嘗試更改Content-Type
以查看是否會覆蓋任何行為,但事實並非如此。
簡而言之,您無法覆蓋用戶的設置。
您可以在此處查看更多內容: 如何在流式傳輸PDF附件時強制“另存為”對話框
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.