我在尝试将图像上传到 AWS S3 时遇到一些问题。似乎可以正确上传文件,但是每当我尝试下载或预览时,它都无法打开。目前,这是我正在使用的上传代码:
<?php
require_once 'classes/amazon.php';
require_once 'includes/aws/aws-autoloader.php';
use Aws\S3\S3Client;
$putdata = file_get_contents("php://input");
$request = json_decode($putdata);
$image_parts = explode(";base64,", $request->image);
$image_type_aux = explode("image/", $image_parts[0]);
$image_type = $image_type_aux[1];
$image_base64 = $image_parts[1];
$dateTime = new DateTime();
$fileName = $dateTime->getTimestamp() . "." . $image_type;
$s3Client = S3Client::factory(array(
'region' => 'eu-west-1',
'version' => '2006-03-01',
'credentials' => array(
'key' => Amazon::getAccessKey(),
'secret' => Amazon::getSecretKey(),
)
));
try {
$result = $s3Client->putObject(array(
'Bucket' => Amazon::getBucket(),
'Key' => 'banners/' . $fileName,
'Body' => $image_base64,
'ContentType' => 'image/' . $image_type,
'ACL' => 'public-read'
));
echo $result['ObjectURL'] . "\n";
} catch(S3Exception $e) {
echo $e->getMessage() . "\n";
}
?>
因此,当我上传图像文件后检查控制台时,它具有预期的大小、权限和标头,但正如我所说,每当我尝试打开该文件时,它都会失败。
这里可能有什么问题?提前致谢。
这里的问题是您似乎上传的是图像的 Base64 编码版本,而不是图像的原始字节。首先获取 $image_base64 并解码为原始字节http://php.net/manual/en/function.base64-decode.php http://php.net/manual/en/function.base64-decode.php。我确信如果您尝试在文本编辑器中打开这些“图像”,您会看到 Base64 十六进制数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)