我们通过Laravel将图像上传到亚马逊s3水桶,条件如下:
$fileOptions = [
'visibility' => 'public',
'ContentType' => 'image/png',
'ContentTransferEncoding' => 'base64'
//'ContentType' => 'binary/octet-stream'
];
$this->lastUploadSuccess = Storage::disk($this->useDisk)
->getDriver()
->put( $_filePath.(strrpos($_filePath, "/")!=strlen($_filePath)-1?"/":"").$_fileName , $_fileContents , $fileOptions);
上传本身工作正常,文件存在并且是公开的,但是当尝试在返回的URL中在浏览器中访问它时,它无法呈现文件。
Inspector建议使用上传时设置的文件类型发送
Accept-Ranges: bytes
Content-Type: image/png
Content-Length: 22290
Server: AmazonS3
将文件保存到本地计算机并尝试在那里打开它还会返回特定于操作系统的
the file "filename.png" could not be opened
It may be damaged or use a file format that Preview doesn’t recognize.
在文本编辑器中打开它表示它是在$ _fileContents(即base64或octet-stream)上传的数据,而且ContentType和ContentTransferEncoding的组合似乎无法将图像渲染或下载到正确的图像中文件。
导致此问题的原因是什么?如何解决?