使用JavaScript和PHP下载图像文件并返回zip文件 我正在开发图像板类网站的Safari扩展,我希望实现的一个更大的功能是下载已经发布的所有图像(张贴的图片,而不是全局页面级图像)。p>

使用JavaScript和PHP下载图像文件并返回zip文件 我正在开发图像板类网站的Safari扩展,我希望实现的一个更大的功能是下载已经发布的所有图像(张贴的图片,而不是全局页面级图像)。p>,php,javascript,zip,archive,zepto,Php,Javascript,Zip,Archive,Zepto,这里已经有类似的问题了,但我的问题有点不同,问题中的图像托管在完全不同的服务器上。我已经进行了一些头脑风暴,并认为在JS数组中收集所有图像URL,然后将其发送到我的服务器以转换为zip文件(强制下载,而不仅仅是文件链接)将是最好的方式。我还希望在用户下载zip文件后将其删除 我已经完成了大部分的扩展特性,但这一个让我很困惑。任何帮助都将不胜感激 我该怎么做呢?您想要一个分机来联系您的服务器下载吗?那是个糟糕的主意!在本地创建zipfile—它不是常规javascript,而是一个扩展—您拥有完全

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

我已经完成了大部分的扩展特性,但这一个让我很困惑。任何帮助都将不胜感激


我该怎么做呢?

您想要一个分机来联系您的服务器下载吗?那是个糟糕的主意!在本地创建zipfile—它不是常规javascript,而是一个扩展—您拥有完全访问权限

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

您遇到了什么问题?

您可以使用PHP的类生成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;

哪一部分难倒了你?你能用PHP吗?我试着在下面更好地解释这件事。这本身并不是什么问题,我只是在一分钟内还没有练习过这类事情。你们是说JavaScript可以自己制作归档文件吗?据我所知,Safari不允许扩展访问不在扩展包中的最终用户文件。我想这意味着它也不能写文件。你们是说JavaScript可以自己制作归档文件吗?据我所知,Safari不允许扩展访问不在扩展包中的最终用户文件。我想这意味着它也不能写文件。基本上,他们所能做的就是将内容注入目标并修改Safari本身。基本上,我能想到的唯一选择是将一组图像URL发送到PHP脚本并从中存档。如果这不是个好主意你们会怎么做?很抱歉重复了这篇文章,我不知道有5分钟的编辑限制。@Nikmart您可以删除以前的评论,或者留下它,只添加额外的信息,而不是在第二条评论中重复。@Nikmart如果您的分机不能这样做,我想Web服务器是您唯一的选择,但您必须将其作为服务编写—人们提交列表,然后等到文件准备好后再下载。下载所有图片需要很长时间,您才能实时完成。但是你应该努力找到另一种方法——作为一个web服务来做这件事是不理想的。我同意这不是理想的。相反的方法很容易实现(将zip解压缩到服务器上),这让我感到困惑。现在我知道了为什么这种类型的脚本不存在于Windows可执行文件之外。谢谢你的帮助!