0
設置MEAN堆棧應用程序僅在成功完成表單時下載PDF附件的最簡單方法是什麼?僅在成功的表單提交時才提供PDF
注意:沒有用戶管理。每個人都可以查看此表單。如果他們成功填寫,他們應該能夠下載表格。但是,例如,我們不希望該URL可以在電子郵件中共享。獲得PDF的唯一方法是填寫表格。 (當然,PDF可以通過電子郵件發送給從那裏任何人,但是這是好的。)
目前,PDF只能下載通過訪問的NodeJS/Express端點就像這樣:
app.get('/endpoint', function(req, res) {
res.setHeader('Content-disposition', 'attachment;');
res.setHeader('Content-type', 'application/pdf');
var file = __dirname + '/pdf/ebook.pdf';
res.download(file);
});
的/ pdf直接無法公開訪問。
如何可以這樣做的一些想法:
- 網站的每個訪問者收到一個特殊的按鍵,如果他們正確地填寫表格,參觀「/ specialkey」成爲一個臨時端點下載電子書。然後在客戶端,
$window.location.assign('/specialkey');
將被執行以下載電子書。
但是,我不確定將密鑰發送給每個唯一用戶的最佳方式是什麼。而且,對於概念上簡單的東西,它似乎過於複雜。 「只有在成功提交表單的情況下才能使用電子書。」
有沒有人遇到過這個?
SOLUTION:
服務器:
var session = require('express-session');
...
app.use(session({
secret: 'your secret here',
name: 'your session name here',
proxy: true,
resave: true,
saveUninitialized: true
}));
...
// Send the session ID to the client
app.get('/key', function(req, res) {
res.send(req.session.id);
});
// Download PDF
app.get('/download/:token', function(req, res) {
if (req.params.token === req.session.id) {
res.setHeader('Content-disposition', 'attachment;');
res.setHeader('Content-type', 'application/pdf');
// Note: /pdf directory is not publicly accessible
var file = __dirname + '/pdf/ebook.pdf';
res.download(file);
} else {
res.sendFile(__dirname + '/public/index.html');
}
});
客戶:
$http.get('/key').then(function(response) {
vm.key = response.data;
});
...
// Then on successful form completion, call:
$window.location.assign('/download/' + vm.key);
謝謝。這幫了很多。 –