问题描述
我正在尝试使用 s3
和 Laravel 8
将一些文件从 digitalocean(空间)上传到 flysystem-aws-s3-v3
兼容存储。
Aws\S3\Exception\S3Exception
Error executing "PutObject" on "//SPACES_NAME.nyc3.digitaloceanspaces.com/SPACES_NAME.nyc3.digitaloceanspaces.com"; AWS HTTP error: Server error: `PUT http://SPACES_NAME.nyc3.digitaloceanspaces.com/SPACES_NAME.nyc3.digitaloceanspaces.com` resulted in a `501 Not Implemented` response: <?xml version="1.0" encoding="UTF-8"?><Error><Code>NotImplemented</Code><RequestId>tx00000000000000bf40fd9-00605636a9-96 (truncated...) NotImplemented (server): - <?xml version="1.0" encoding="UTF-8"?><Error><Code>NotImplemented</Code><RequestId>tx00000000000000bf40fd9-0060
5636a9-9617be5-nyc3c9617be5-nyc3c-nyc3-zg03
以下是我的来自 .env
的数字海洋常量:
DO_SPACES_ACCESS_KEY=[edit]
DO_SPACES_SECRET_ACCESS_KEY=[edit]
DO_SPACES_ENDPOINT=nyc3.digitaloceanspaces.com
DO_SPACES_REGION=nyc3
DO_SPACES_BUCKET=SPACES_NAME
DO_URL=https://SPACES_NAME.nyc3.cdn.digitaloceanspaces.com
这是来自 config/filesystem.PHP
的配置部分:
'disks' => [
...
'do' => [
'driver' => 's3','key' => env('DO_SPACES_ACCESS_KEY'),'secret' => env('DO_SPACES_SECRET_ACCESS_KEY'),'region' => env('DO_SPACES_REGION'),'bucket' => env('DO_SPACES_BUCKET'),'endpoint' => env('DO_SPACES_ENDPOINT'),'url' => env('DO_URL'),],
Route::post('upload',function(){
$extension = request()->file('file')->extension();
$path = Storage::disk('do')->putFileAs('upload',request()->file('file'),time() . '.' .$extension,'public');
});
对如何修复此 501 not implemented
错误有任何想法吗?我看到出于某种原因该 url 出现了两次,我认为这与它有关 :-?
解决方法
我解决了同样的问题,如下:
- 将以下端点添加到
.env
文件
DO_SPACES_ENDPOINT=https://SPACES_NAME.nyc3.digitaloceanspaces.com
- 将
config/filesystem.php
文件中的一个选项添加到您的 DO 空间。
'bucket_endpoint' => true
- 清除缓存。