1

我有几个链接到图像的 URL,我希望能够用这些图像制作一个 .zip 文件。基本上,用户可以下载自己的图像。

图像不在我的服务器上,有没有办法以每个用户使用自己的带宽的方式压缩这些文件?

如果不是,这个问题的最佳解决方案是什么?(PHP 或 Javascript)

编辑:为什么要投 2 票?我不是要代码。我有 2 个问题:1) 我可以在不使用服务器带宽的情况下下载图像并压缩它们吗?2)如果不是,最好的解决方案是什么。

4

2 回答 2

7

1.要下载图片,如果http://example.com/image.php将图片保存为 test.jpg

a) 如果您将 allow_url_fopen 设置为 true:

$url = 'http://example.com/image.php';
$img = '/tempfolder/test.jpg';
file_put_contents($img, file_get_contents($url));

b) 其他使用 cURL:

$ch = curl_init('http://example.com/image.php');
$fp = fopen('/tempfolder/test.jpg', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

2.要压缩所有文件,您可以使用ziparchive创建 zip。

$files = array('test.jpg', 'test1.jpg');
$zipname = 'file.zip';
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
foreach ($files as $file) {
    $zip->addFile($file);
}
$zip->close();

3.要流式传输 zip 文件,请使用以下行,

$zipfilename = 'file.zip';
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=file.zip');
header('Content-Length: ' . filesize($zipfilename));
于 2012-11-15T11:29:33.870 回答
3

JS 可以通过使用 ajax 下载图像(这里有一些关于使用 ajax 下载二进制数据的想法)和一些 JS ZIP 库(例如http://stuartk.com/jszip/)来打包数据 - 然后没有服务器带宽将会被使用。

另一种可能性是将图像下载到服务器(例如使用cURL),压缩它们(例如使用ZipArchive类)并发送到客户端 - 此解决方案使用服务器带宽。

于 2012-11-15T11:28:55.120 回答