Node JS/Express визуализирует html, а затем загружает файл с тем же запросом GET

Я хотел бы, чтобы целевая страница была отправлена ​​​​по ссылке по электронной почте и использовала тот же GET, чтобы прикрепить файл для загрузки.

Я хотел бы отобразить шаблон Handlebar с помощью Express Static и использовать тот же поток 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);

person user5237222    schedule 18.08.2015    source источник


Ответы (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 данных см. здесь (работает для текстового файла, но я не знаю для других типов файлов) (используя один GET!)

* С методом мета-перенаправления, если вы абсолютно хотите загрузить с того же URL-адреса, используйте реферер для определения источника после перенаправления с помощью req.headers.referer, затем, если он равен вашей странице, отправьте файл, иначе отправьте свою страницу


Это мой первый ответ на этом сайте

person Bastien Adam    schedule 18.08.2015
comment
Спасибо за ваш ответ - отличные предложения, но, к сожалению, для экономии пропускной способности и стоимости Heroku я хотел бы получить файл с AWS S3 и передать «фрагменты» пользователю для загрузки файла, аналогичного Express: res.attachment('file' ) и отправить. Я не верю, что смогу сделать это с iFrame, но я подумал, что спрошу: знаете ли вы, как можно прикрепить «куски» из потока data.body к iFrame??? Еще раз спасибо за ответ - person user5237222; 18.08.2015
comment
Я думаю, что это возможно только для текстовых файлов или изображений, которые можно преобразовать в ссылку, чтобы поместить ее в iFrame или что-то подобное (я не нашел других типов файлов при поиске URI данных). Но вы должны знать, что сгенерированная ссылка будет больше, чем файл, и я думаю, что страница не будет отправлена ​​до того, как она будет полностью сгенерирована. Если у вас есть текстовый файл, вы можете скопировать его: jsfiddle.net/onfbj2o9/1 . Иначе я не могу вам помочь. Для экономии пропускной способности, если у вас есть большой веб-сайт, вы можете увидеть для p2p, например, peer5. Извините за мой плохой английский - person Bastien Adam; 20.08.2015