php - 在本地机器上从 Amazon S3 下载文件,而不让用户知道 codeigniter PHP 中的文件来源
问题描述
1) 下面是我在 codeigniter 中从 Amazon S3 下载私有文件的代码,$this->S3 有我的客户端信息(key/secretkey),当我使用下面的代码时,它将文件保存在服务器上的根目录中,我想将其保存在用户本地计算机的默认下载位置,因为我不知道具体的最终用户下载位置,有什么帮助解决这个问题吗?
我研究了一整天,找不到具体的解决方案。
$result1 = $this->S3->getObject([
'Bucket' => $bucket,
'Key' => $keyname,
'SaveAs' => $keyname
]);
注意:我不想向最终用户显示我们正在从亚马逊服务器下载文件,这就是为什么下面的解决方案在 Firefox 上失败的原因
2)
$cmd = $this->S3->getCommand('GetObject', [
'Bucket' => $bucket,
'Key' => $keyname,
'ResponseContentDisposition' => 'attachment; filename="'.$keyname.'"'
]);
$signed_url = $this->S3->createPresignedRequest($cmd, '+1 minute');
$url=$signed_url->getUri();
header('Location: '.$url);
解决方案
第 1 步将代码放入您的控制器中(它也适用于 AWS 新图像 url)
$url="http//:projectname/foldername/map.jpg"
$data = $this->file_get_contents_curl($url);
$fp = 'map.png';
$this->load->helper('download');
force_download($fp,$data);
第 2 步还将代码放入您的控制器中
private function file_get_contents_curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
推荐阅读
- c# - LINQ 查询 - 对多个实体进行分组并求和
- javascript - 为什么我的 javascript 正则表达式模式没有捕获多个实例?
- google-identity - 加载智能锁时出现403错误
- macos - brew更新无法访问github
- android - 这个谷歌地图滚动动画叫什么,我如何复制它?
- excel - 从 Outlook 调用 Excel 宏会冻结 Outlook
- arrays - 在 Excel 中返回计算数组
- vb.net - 使用特权帐户重置 AD 用户帐户密码
- python - 使用多级 groupby 在 python 中创建一个新列
- python - 通过变量连接字符串和数字。抛出这个“TypeError:必须是 str,而不是 int”