簡體   English   中英

如何使用Node.js和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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM