Автоматическая передача файлов из HTML - PullRequest
0 голосов
/ 07 декабря 2008

Я создаю веб-приложение, которое помогает пользователям настраивать и устанавливать приложение. Он динамически создает набор файлов конфигурации, а затем отправляет их в архив (файл .ZIP) вместе с установщиком для приложения. Веб-страница создается из сценария оболочки Linux (извините), и из соображений безопасности я бы предпочел, чтобы файл отправлялся непосредственно из сценария, а не как ссылка, поэтому пользователь не может получить к нему прямой доступ. *

Вот процесс: как только пользователь ввел некоторую информацию и файлы были сгенерированы, я хочу отобразить страницу с инструкциями, а затем автоматически начать загрузку, не прося пользователя нажать ссылку «скачать этот файл». :

#!/bin/bash
echo_header_and_instructions         # Standard HTML
<Magic HTML tag to start transfer>   # ??? What goes here???
command_to_stream_the_files          # Probably 'cat'
echo_end_tags                        # End the page.

Спасибо за вашу помощь!

Ответы [ 3 ]

3 голосов
/ 07 декабря 2008

Думаю, вы не можете этого сделать.
Вы можете принудительно загрузить файл через следующие заголовки, но насколько я знаю, вы не можете смешивать HTML и загрузку файла.

Заголовки:

Content-type: MIME/type
Content-Disposition: attachment; filename="archive.zip"
Content-Length: filesize_in_bytes

Длина содержимого не является обязательной, но при ее использовании диалоговое окно загрузки может показать, сколько еще файлов нужно загрузить.

Что вы можете сделать, это перезагрузить страницу, используя JavaScript. Поскольку страница представляет собой файл, исходная HTML-страница останется на месте:

<html>
<head>
<title>This is the page containing information</title>
<script type="text/javascript">
window.onload = function(){
 document.location = 'somefile.zip';
}
</script>
</head>
<body>
This page will stay visible while the file is being downloaded<br>
</body>
</html>
1 голос
/ 07 декабря 2008

Я думаю, вы можете заставить браузер предлагать пользователю загрузить файл, используя метатег для обновления, но, как сказал Пим Джагер, я не думаю, что вы можете сделать это с одной передачей , Вы можете попробовать сделать что-то вроде:

<meta http-equiv="refresh" content="5;url=http://example.com/pathtodownload.zip" />
0 голосов
/ 07 декабря 2008

Друг предоставил магию: используйте тег <iframe>, чтобы создать «невидимый» фрейм, содержащий только файл для загрузки:

<iframe id="file_download" width="0" height="0" scrolling="no" 
   frameborder="0" src=/cgi-bin/my/scripts/sendfiles?file=$filename.zip>
   You need a browser that supports frames.
</iframe>`
...