【问题标题】:Using JavaScript and PHP to download image files and return a zip file使用 JavaScript 和 PHP 下载图像文件并返回一个 zip 文件
【发布时间】:2012-07-15 16:03:48
【问题描述】:

我正在为图像板类型网站开发 Safari 扩展,我希望实现的更大功能之一是能够下载所有图像(发布的图像,而不是全局页面 -级别图像)已发布。

这里已经有类似的问题,但我的问题有点不同,因为有问题的图像托管在完全不同的服务器上。我一直在集思广益,并认为将所有图像 URL 收集到 JS 数组中,然后将其发送到我的服务器以转换为 zip 文件(强制下载,而不仅仅是文件的链接)将是最好的要走的路。我还希望在用户下载后删除 zip。

我已经完成了大部分的扩展功能,但这个让我很难过。任何帮助将不胜感激。

我该怎么做呢?

【问题讨论】:

标签: php javascript zip archive zepto


【解决方案1】:

您想要一个扩展程序来联系您的服务器进行下载吗?这是一个可怕的想法!在本地制作 zipfile - 它不是普通的 javascript,它是一个扩展 - 您拥有完全访问权限。

无论如何,假设你想这样做,你遇到了什么麻烦?你得到一个 url 列表,将它们发送到你的服务器,你的服务器下载它们,压缩它们并将它们发送给用户。 (“你的服务器下载它们”部分应该让你担心!)

你有什么问题?

【讨论】:

  • 这本身并不是什么大问题,我只是暂时还没有练习过这种事情。那么你们是说 JavaScript 可以自己制作档案吗?据我所知,Safari 不允许扩展访问不在扩展包中的最终用户文件。我认为这意味着它也不能写入文件。
  • 那么你们是说 JavaScript 可以自己制作档案吗?据我所知,Safari 不允许扩展访问不在扩展包中的最终用户文件。我认为这意味着它也不能写入文件。基本上他们所能做的就是将内容注入目标并修改 Safari 本身。基本上我能想到的唯一选择是将一组图像 url 发送到 PHP 脚本并从中存档。如果这不是一个好主意,你们会怎么做?抱歉发了两次帖子,我没有意识到有 5 分钟的编辑限制。
  • @NikMatt 您可以删除您之前的评论,或者留下它并添加其他信息,而不是在您的第二条评论中重复。
  • @NikMatt 如果您的扩展程序不能这样做,那么我猜网络服务器是您唯一的选择,但您必须将其编写为服务 - 人们提交列表,然后等到文件在下载之前准备好。下载所有图像需要很长时间才能实时完成。但是您应该非常努力地寻找另一种方法 - 将其作为 Web 服务来做确实不理想。
  • 我同意这并不理想。让我感到困惑的是,反过来很容易实现(将 zip 提取到服务器上)。现在我知道为什么这种类型的脚本不存在于 Windows 可执行文件之外。感谢您的帮助!
【解决方案2】:

您可以使用 PHP 的 ZipArchive 类制作 ZIP,然后将其流式传输到浏览器。

<?php
// Create temp zip file
$zip = new ZipArchive;
$temp = tempnam(sys_get_temp_dir(), 'zip');
$zip->open($temp);

// Add files
$zip->addFromString('file.jpg', file_get_contents('http://path/to/file.jpg'));
$zip->addFile('/this/is/my/file.txt');

// Write temp file
$zip->close();

// Stream file to browser
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=myFile.zip');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($temp));

readfile($temp);

unlink($temp);
exit;

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    相关资源
    最近更新 更多