【发布时间】:2009-06-25 07:02:35
【问题描述】:
如何在一个请求中通过 C++ Web 应用程序将一组文件从服务器机器复制到本地硬盘?这是一种从服务器将批量文件下载到本地计算机的方法。我想在 Java 中你可以通过 ZipInputStream 和 GZipInputStream 来做到这一点。
是否有可能完全通过服务器端代码来实现?还是需要在本地机器上运行客户端来执行文件的批量复制?
【问题讨论】:
如何在一个请求中通过 C++ Web 应用程序将一组文件从服务器机器复制到本地硬盘?这是一种从服务器将批量文件下载到本地计算机的方法。我想在 Java 中你可以通过 ZipInputStream 和 GZipInputStream 来做到这一点。
是否有可能完全通过服务器端代码来实现?还是需要在本地机器上运行客户端来执行文件的批量复制?
【问题讨论】:
假设您有一个接受表单请求的 Java servlet / ISAPI 扩展
http://server:port/fileserver?f=FILE1&f=FILE2&.....&f=FILEN
收到这样的请求后,服务器端代码可以使用 zlib 将所有文件打包成一个 zip 文件,并将该 zip 文件作为 HTTP 响应发送,设置 Content-Type、Content-Length、Last-Modified、等等
进一步说明:如果您在 IIS6 及更高版本上使用 ISAPI,您还可以将此内容添加到 IIS 的内核模式响应缓存中。
【讨论】:
如果用户意识到这一点,并且这些文件对于网站渲染来说不是必需的,您可以将它们推送到存档中并从您的网站获得链接(或执行类似 sourceforge 的操作,只需重定向到存档和浏览器下载它。对于存档,您可以使用zlib。只需将 Content-type 作为 gzip 发送并推送数据(此处来自标准输入)
int ret;
/* avoid end-of-line conversions */
SET_BINARY_MODE(stdin);
SET_BINARY_MODE(stdout);
ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);
if (ret != Z_OK)
zerr(ret);
return ret;
如果您尝试将整个页面(HTML、CSS、JS、IMG)作为一个整体发送,则所有这些文件都可以插入到 HTML 中,甚至是图像。 (见this)。
【讨论】: