【问题标题】:PHP S3 download: echo huge text variable to browser with header to downloadPHP S3下载:将巨大的文本变量回显到带有标题的浏览器下载
【发布时间】:2021-01-28 15:55:53
【问题描述】:

PHP S3 下载:将巨大的文本变量回显到带有要下载标题的浏览器,但页面超时且无响应。

这是我从 S3 服务下载大量 CSV 文件数据的代码:

$result = $s3->getObject($_REQUEST['bucket'], $_REQUEST['path'], false);

if($result){
    header('Content-type: ' . $result->headers['type']);
    header('Content-Length: ' . $result->headers['size']);
    header('Content-Disposition: inline; filename="'.$_REQUEST['filename'].'"');

   echo $result->body;
} else {
    echo 'File not found';
}

我还增加了页面执行时间:

ini_set('memory_limit', '1024M' );
ini_set('max_execution_time', 0); 

【问题讨论】:

标签: php csv amazon-s3 text echo


【解决方案1】:

我找到了上述问题的替代解决方案,而不是从 aws 获取内容然后将大量数据缓冲到浏览器,我从文件中创建了“公共”url 并将用户重定向到链接。

// Getting the URL to an object
$url = $s3->getObjectUrl($targetBucket, $keyname);
// redirect user to the download link
header('Location: '.$url); exit;

如果是“私有”存储桶和文件,我们可以创建一个临时存储桶并根据请求将文件复制到该存储桶,如下所示,然后再次创建链接,如上所示。

// temporary bucket for public files
$sourcebucket = '........';
$targetBucket = '........';
$keyname = '........';
// Copy an object.
$s3->copyObject([
    'Bucket'     => $targetBucket,
    'Key'        => "{$keyname}",
    'CopySource' => "{$sourcebucket}/{$keyname}",
]);
$s3->putObjectAcl(array(
    'Bucket'    => $targetBucket,
    'Key'       => $keyname,
    'ACL'       => 'public-read'
));

我在这里发帖,可能会对其他人有所帮助。因为我厌倦了解决方案! :)

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多