フォームの正常終了時にのみPDF添付ファイルをダウンロードするには、MEANスタックアプリケーションを設定する最も簡単な方法は何ですか?フォームに成功したフォームにのみ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);
ありがとうございます。これは多くの助けとなりました。 –