我尝试使用getObject
$s3 = AWS::createClient('s3');
$file = $s3->getObject(array(
'Bucket' => 'hotel4cast',
'Key' => $path->path,
'SaveAs' => public_path()
));
我收到以下错误
执行错误
"GetObject" on "https://s3.amazonaws.com/mybucket/filename.xlsx";
AWS HTTP error: Unable to open /var/www/html/laravel/public/ using mode r+: fopen(/var/www/html/laravel/public/):
ailed to open stream: Is a directory
如果我把SaveAs
取出并转储$file
我得到数据的对象,正文,流式传输所有这些东西,但不知道如何处理它。
答案 0 :(得分:1)
我已经想到了,aws sdk中有bug, 我可以通过在调用getObject
之前在var中存储路径来获取要保存的文件$r = fopen(public_path() . '/myfile.xlsx', 'wb');
$s3 = AWS::createClient('s3');
$file = $s3->getObject(array(
'Bucket' => 'bucketname',
'Key' => $path->path,
'SaveAs' => $r
));
答案 1 :(得分:0)
你能告诉我这些究竟是什么相等吗?所以,我可以相应地指导你。
$path->path = ???
public_path() = ???
<强>被修改强>
您的方法参数应该是这样的,您只需传递saveAs
路径但附加密钥名称,因此,添加keyname
saveAs
路径,它将被下载。< / p>
$s3 = AWS::createClient('s3');
$file = $s3->getObject(array(
'Bucket' => 'hotel4cast',
'Key' => $path->path,
'SaveAs' => public_path()."/filename.xlsx"
));
以下是代码示例,我用它来上传文件和复制文件
上传
$result = $this->S3->putObject([
'ACL' => 'public-read-write',
'Bucket' => 'xyz', // REQUIRED
'Key' => 'file.xlsx', // REQUIRED
'SourceFile' => public_path()."/xlsx/file.xlsx",
]);
用于从一个存储桶复制到另一个存储桶
$copy = $this->S3->copyObject(array(
'ACL' => 'public-read-write',
'Bucket' => 'xyz', // REQUIRED
'Key' => 'file.xlsx', // REQUIRED
'CopySource' => 'mybucketname/xlsx/file.xlsx,
));
但是您在s3存储桶中存在的文件应该具有读取权限。另外,它会给你错误saveAs
,copy
等
这里有多个权限,你可以在这里看到
'ACL' => 'private|public-read|public-read-write|authenticated-read|aws-exec-read|bucket-owner-read|bucket-owner-full-control',