使用JavaScript和PHP下载图像文件并返回一个zip文件


Using JavaScript and PHP to download image files and return a zip file

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

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

我已经完成了大部分的扩展功能,但这一个让我很困惑。如果有任何帮助,我将不胜感激。

我该怎么做呢?

您想要一个扩展来联系您的服务器进行下载吗?这主意太糟糕了!在本地创建zip文件-它不是常规的javascript,而是一个扩展-您可以完全访问它。

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

你有什么问题?

您可以使用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;