0

我正在构建一个 Web 应用程序来指导我的用户完成应用程序的配置和安装。它动态构建一组配置文件,然后将它们与应用程序的安装程序一起发送到存档(.ZIP 文件)中。该网页是从 linux shell 脚本生成的(对不起),出于安全原因,我更喜欢直接从脚本发送文件,而不是作为链接,因此用户无法直接访问它。

过程如下:一旦用户输入了一些信息并生成了文件,我想显示一个带有说明的页面,然后自动开始下载,而不要求用户单击“下载此文件”链接:

#!/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.

谢谢你的帮助!

4

3 回答 3

3

我认为你真的不能那样做。
您可以通过以下标头强制文件下载,但据我所知,您不能混合使用 HTML 和文件下载。

标题:

内容类型:MIME/类型
内容处置:附件;文件名=“存档.zip”
内容长度:filesize_in_bytes

内容长度不是强制性的,但使用它将确保下载对话框可以显示还有多少文件要下载。

您可以做的一件事是使用 javascript 重新加载页面。因为该页面是文件下载,所以原始 HTML 页面将保留在原处:

<html>
<头部>
<title>这是包含信息的页面</title>
<script type="text/javascript">
window.onload = 函数(){
 document.location = 'somefile.zip';
}
</脚本>
</head>
<正文>
下载文件时,此页面将保持可见<br>
</正文>
</html>
于 2008-12-07T17:46:14.827 回答
1

我认为您可以通过使用元标记进行刷新来使浏览器提示用户下载文件,但正如 Pim Jager 所说,我认为您不能通过一次传输来完成。您也许可以尝试执行以下操作:

<meta http-equiv="refresh" content="5;url=http://example.com/pathtodownload.zip" />
于 2008-12-07T18:53:44.877 回答
0

一位朋友提供了魔法:使用<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>`
于 2008-12-07T18:54:25.937 回答