phpqrcode+;将缓存文件保存到Amazon,而不是服务器上的文件夹

phpqrcode+;将缓存文件保存到Amazon,而不是服务器上的文件夹,php,amazon-web-services,amazon-s3,save,qr-code,Php,Amazon Web Services,Amazon S3,Save,Qr Code,我现在要做的是创建一个二维码图像(PNG),并将其副本保存在服务器根目录下的文件夹中。现在我不想把这个图像保存在我的服务器上,而是保存在我的amazon bucket上 我知道如何在amazon上保存一个文件,但我不知道如何让它一起工作。 这是我将其保存在服务器根文件夹中的原始代码: $fileName = $quiz_url . '.png'; $pngAbsoluteFilePath = APPLICATION_PATH . '/../public/qrcodecaches/' . $fi

我现在要做的是创建一个二维码图像(PNG),并将其副本保存在服务器根目录下的文件夹中。现在我不想把这个图像保存在我的服务器上,而是保存在我的amazon bucket上

我知道如何在amazon上保存一个文件,但我不知道如何让它一起工作。 这是我将其保存在服务器根文件夹中的原始代码:

$fileName = $quiz_url . '.png';

$pngAbsoluteFilePath = APPLICATION_PATH . '/../public/qrcodecaches/' . $fileName; 
$urlRelativeFilePath = '/qrcodecaches/' . $fileName;

// generating
if (!file_exists($pngAbsoluteFilePath)) {
    QRcode::png('http://mysitelink.com/s/'.$quiz_url, $pngAbsoluteFilePath, 'L', 4, 2);
}
这就是我在Amazon上保存文件的方式:

$bucket = 'mybucket';
$map = 'qrcodecaches';

$client = S3Client::factory(array(
    'key'    => 'mykey',
    'secret' => 'mysecret',
));


$fileName = $quiz_url . '.png';
$keyname = $map . '/' . $fileName;

try {
    $client->putObject(array(
        'Bucket' => $bucket,
        'Key'    => $keyname,
        'Body'   => fopen('/path/to/file', 'r'),
        'ACL'    => 'public-read',
    ));
   } catch (S3Exception $e) {
        echo "There was an error uploading the file.\n";
}

但是我需要在“Body”标签中保存什么呢?有人能帮我吗?

Amazon S3客户端文档建议您可以轮询以检查上传是否成功

$client->waitUntilObjectExists(array(
    'Bucket' => $bucket,
    'Key'    => $keyname
));
或者,如果您已经将文件写入服务器上的磁盘,您可以向S3Client提供该文件的路径,并让它自己处理文件流

try {
    $client->putObject(array(
        'Bucket'     => $bucket,
        'Key'        => $keyname,
        'SourceFile' => '/path/to/file',
        'ACL'        => 'public-read'
    ));
   } catch (S3Exception $e) {
        echo "There was an error uploading the file.\n";
}

来源:

您可以通过以下临时文件名创建图像文件:

$pngAbsoluteFilePath = tempnam(sys_get_temp_dir(), 'qr_code_');
if (!file_exists($pngAbsoluteFilePath)) {
    QRcode::png('http://mysitelink.com/s/'.$quiz_url, $pngAbsoluteFilePath, 'L', 4, 2);
}
然后,您所需要做的就是获取该文件的内容,并将其传递到bucket中对象的
Body

try {
    $client->putObject(array(
        'Bucket' => $bucket,
        'Key'    => $keyname,
        'Body'   => file_get_contents($pngAbsoluteFilePath), // like this
        'ACL'    => 'public-read'
    ));
   }
catch (S3Exception $e) {
   echo "There was an error uploading the file.\n";
}
完成后-如果上传成功-可以删除临时文件。不过,建议您不要这样做,因为在服务器重新启动之前,它将用QR图像填充
/tmp

if ( empty($e) ) {
    unlink($pngAbsoluteFilePath);
}

这对我很有效。

您的图像生成是否正常?在
$pngAbsoluteFilePath
路径中运行脚本后,您能看到它吗?(确保你没有为测试而取消文件链接)这是我在youtube上获得的使用AmazonS3上传图像和文件的最佳教程。在这里,您将了解如何在脚本中使用它,并将其上载到Amazon CDN。这是视频链接。