从Amazon s3下载文件。下载成功但文件为空

时间:2019-09-05 04:21:27

标签: php laravel amazon-s3

我试图将文件从Amazon s3下载到本地存储。下载成功,文件出现在本地存储中,但文件为空无内容。看起来好像错过了代码中的某些内容。需要您的帮助的朋友。在此先感谢

这是代码:


<?php

namespace App\Console\Library;

require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
use Storage;


class DownloadAWS 
{
    public function downloadFile(){

        $s3_file = Storage::cloud()->url('Something.jsonl');
        $s3      = Storage::disk('local')->put('Order.jsonl', $s3_file);

    }
}

2 个答案:

答案 0 :(得分:1)

当前,您正在检索s3文件的URL,并将其放入文件中。您的代码当前应该创建一个文件Order.jsonl,其中包含s3文件的链接。

您真正想要的是获取文件并将其存储在本地。您可以使用以下代码实现此目标:

public function downloadFile()
{
    $s3_file = Storage::cloud()->get('Something.jsonl');
    $s3      = Storage::disk('local')->put('Order.jsonl', $s3_file);
}

唯一的区别是使用get()url()

答案 1 :(得分:1)

require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

try {
    // Get the object.
    $result = $s3->getObject([
        'Bucket' => $bucket,
        'Key'    => $keyname
    ]);

    // Display the object in the browser.
    header("Content-Type: {$result['ContentType']}");
    echo $result['Body'];
} catch (S3Exception $e) {
    echo $e->getMessage() . PHP_EOL;