laravel 如何解决Backblaze B2 S3 Compatible API上的“Unsupported value for canned acl”private“error”?

zxlwwiss  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(172)

在此question中获得问题的帮助后,尽管成功上传了我可以在Backblaze Jmeter 板和应用程序中看到的图像,但我还是收到了另一个错误。

Unable to write file at location: profile-photos/0Oafj0VpwBbrMtvgLEnBmGl3UsL4rrUaD7HLzRDA.jpg. 
Error executing "PutObject" on "https://xxx.s3.us-west-004.backblazeb2.com/profile-photos/0Oafj0VpwBbrMtvgLEnBmGl3UsL4rrUaD7HLzRDA.jpg"; AWS HTTP error: Client error: `PUT https://xxx.s3.us-west-004.backblazeb2.com/profile-photos/0Oafj0VpwBbrMtvgLEnBmGl3UsL4rrUaD7HLzRDA.jpg` resulted in a `400 Bad Request` response: 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
  <Error> 
    <Code>InvalidArgument</Code> 
    <Message>Unsupporte (truncated...) 
InvalidArgument (client): Unsupported value for canned acl 'private' - 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Error> 
  <Code>InvalidArgument</Code> 
  <Message>Unsupported value for canned acl 'private'</Message> 
</Error>

我能做些什么来解决这个问题?

2vuwiymt

2vuwiymt1#

这是Backblaze B2的S3兼容API与Amazon S3之间的差异之一。Backblaze B2控制桶级的可见性,而不是对象级的可见性,您有两个选择:privatepublic-read(在Backblaze Web UI中仅显示为“public”)。如果在将对象放入存储桶时指定了ACL,则必须匹配存储桶的ACL。这里是文档的相关部分。
看起来Laravel试图在公共读取存储桶中创建私有对象,因此B2返回Unsupported value错误。
有两种方法可以解决这个问题。或者:

  • 将您的存储桶可见性从public-read更改为private(web界面中的存储桶设置),或者
  • 配置Laravel以使用public-read封装ACL创建对象。

From this discussion at Laracasts,看起来你可以在config/filesystems.php的s3配置中设置默认可见性。如果在此处设置public,则S3驱动程序会将其Map到public-read

's3' => [
            'driver' => 's3',
            'key' => 'your-key',
            'secret' => 'your-secret',
            'region' => 'your-region',
            'bucket' => 'your-bucket',
            'visibility' => 'public',
        ],

相关问题