2015-08-18 40 views
1

我想通過電子郵件鏈接發送着陸頁並使用相同的GET附加文件下載。節點JS/Express渲染html,然後下載文件相同的GET請求

我想使用Express Static渲染Handlebar模板,並使用相同的Req流來下載文件。我知道請求不能設置兩次,所以我怎麼能解決這個使用一個GET?下載可能需要一些時間才能下載,因此在用戶單擊電子郵件鏈接後需要登錄頁面,但我也需要下載文件的請求。

預先感謝您的任何想法。陷在這一個。

例如:

app.get('/download a file from email link', function (req, res, next) { 

res.render('index') // replies w Template rendered Express... 

然後頭被設置後,下載文件的標題已回覆到同一個GET後:

res.attachment('file'); 
res.send(data for download); 

回答

1

我認爲這是無法發送頁面和文件在同一時間,但存在任何解決方案:

  • 在頁面中使用iframe從服務器下載文件: <iframe style="display:none;" src="http://URL_OF_FILE_TO_DOWNLOAD"></iframe>(不使用一個GET :()
  • 用戶元刷新重定向到文件下載: <meta http-equiv="refresh" content="0; URL=http://URL_OF_FILE_TO_DOWNLOAD">(使用一個GET,但兩次要求*)

  • 或者,用一個黑客,你可以發送文件中的HTML,然後將它與數據URI保存在客戶端see here(文本文件的工作,但我不知道其他文件類型)(使用一個GET!)

*與元重定向方法,如果你絕對想從同一個URL下載,請使用referer t Ø與req.headers.referer重定向後determin起源,那麼如果它等於你的網頁,發送文件,否則,把你的頁面


這是這個網站上我的第一個答案

+0

感謝您的reply-偉大建議,但不幸的是爲了節省帶寬和Heroku成本我想從AWS S3獲取文件並將'塊'傳遞給用戶,以便下載類似於Express:res.attachment('file')的文件併發送。我不相信我能做到這一點,但我想我會問 - 你是否知道將data.body流中的'Chunks'附加到iFrame中?再次感謝 – user5237222

+0

我認爲只有基於文本的文件或圖像被轉換爲​​鏈接才能將其放入iFrame或其他類似的東西(我沒有找到其他文件類型來搜索數據URI)。但是你必須知道生成的鏈接會更大,並且我認爲這個頁面在生成之前不會被髮送。如果你有一個文本文件,你可以複製它:http://jsfiddle.net/onfbj2o9/1/。否則我幫不了你。爲了節省帶寬,如果你有一個大網站,你可以看到p2p像peer5。 對不起,我的英文不好 –