首页 > 解决方案 > 在本地机器上从 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);

显示源下载 url 的 Firefox 另存为弹出窗口的屏幕截图

标签: phpamazon-web-servicescodeigniteramazon-s3

解决方案


第 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;
    }

推荐阅读