我正在使用典型的PHP / MySql设置为客户(商业房地产的摄影师)构建自定义应用程序。此应用程序将允许我的客户的客户访问分配给他们的图像,查看和下载它们。
我需要添加选项以允许其客户点击“全部下载 - 打印尺寸质量”和“全部下载 - 网络分辨率”。上传图像后,它们将自动保存在这些单独的分辨率中。为了给您一个想法,将客户通常想要下载的图像相加,最多可达500MB。我认为将所有图像压缩成拉链将是最佳选择。
你如何建议我接近这个,如果你知道任何可能对我有帮助的消息来源?
答案 0 :(得分:1)
每次下载都不应该动态生成ZIP文件。这将是非常低效的。
上传照片时,请从照片中创建两个新的ZIP文件(每种尺寸一个)。在表中添加两列,指向较小的ZIP,另一列指向较大的列。只需指出你的两个链接。
答案 1 :(得分:1)
您可以使用PHP Zip
示例可以在这里找到:http://www.php.net/manual/en/zip.examples.php
或
如果您更喜欢脏解决方案,可以使用linux内置tar
功能,并与exec
结合使用
我认为每张图片应该有3个不同的尺寸,而您的拉链只关注选择具有正确尺寸的图像以添加到存档中。
但是,上面不是问题,你应该说服你的客户更好地下载这些庞大的文件,比如考虑使用ftp程序,或者一些下载工具而不仅仅是通过http超链接(失败的可能性也是如此)高)
答案 2 :(得分:0)
我会说拉链是要走的路。使用PHP动态压缩所选文件,然后让用户自动下载它们。
可能在表单中的图像旁边有一个用户单击复选框,数据被发送到处理页面,该页面为用户扫描ZIP文件。
答案 3 :(得分:0)
使用ZipArchive,将其存储到临时文件然后输出:
$path = '/path/to/your/images';
// search for files matching *.png; *.gif; *.jpg
$files = glob($path.'/*.{png,gif,jpg}', GLOB_BRACE);
// create temporary filename
$tmp = tempnam(sys_get_temp_dir(), 'images');
// create zip
$zip = new ZipArchive;
$zip->open($tmp, ZIPARCHIVE::CREATE);
foreach ($files as $file) {
// may want to manipulate $file to remove the directory prefix
$zip->addFile($file);
}
$zip->close();
// output as an attachment
header('Content-Type: application/zip');
header('Content-Disposition: attachment;filename=foo.zip');
readfile($tmp);
当然,如果你真的有500MB的图像,这需要一段时间。你可能最好提前压缩文件(cron或每次上传)。