Keri
Keri

Reputation: 37

Copying remote file to S3

I'm trying to transfer files from Shopify to S3, and I'm getting this error: "You must specify a non-null value for the Body or SourceFile parameters." I believe it's because I'm transferring files from a remote location but I don't know how to get around this problem. I have validated that the remote file does exist, and that my code works fine if I'm uploading using a form.

My code:

require dirname(__FILE__).'/../../vendor/autoload.php';
use Aws\S3\S3Client;
$s3Client = null;
$bucket="mybucketname"; 
$myfile="myfilename.jpg";  
$mypath="https://shopifyfilepath/".$myfile;
function SendFileToS3($filename, $filepath, $bucket) 
{
    global $s3Client;
    if (!$s3Client) 
    {
        $s3Client = S3Client::factory(array(
        'key' => $_SERVER["AWS_ACCESS_KEY_ID"],
        'secret' => $_SERVER["AWS_SECRET_KEY"]
        ));
    }
    $result = $s3Client->putObject(array(
        'Bucket'     => $bucket,
        'Key'        => $filename,
        'SourceFile' => $filepath,
        'ACL'        => 'public-read'
    ));
    return $result;
}
SendFileToS3($myfile, $mypath, $bucket);

Upvotes: 0

Views: 260

Answers (1)

user149341
user149341

Reputation:

You can't transfer a file directly from a HTTP path to S3. You'll need to download it to a local file (or variable) first, then transfer that.

Upvotes: 1

Related Questions