phpqrcode+;将缓存文件保存到Amazon,而不是服务器上的文件夹
我现在要做的是创建一个二维码图像(PNG),并将其副本保存在服务器根目录下的文件夹中。现在我不想把这个图像保存在我的服务器上,而是保存在我的amazon bucket上 我知道如何在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
$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。这是视频链接。