我有一个Laravel 5.8应用程序,我试图将上传的文件配置为转到Amazon s3存储桶,但是每次尝试保存带有图像的帖子时,都会收到错误Error retrieving credentials from the instance profile metadata server. (cURL error 28: (see http://curl.haxx.se/libcurl/c/libcurl-errors.html))
。互联网上有很多与此相关的帖子,但没有一个能够帮助我解决问题。如果有帮助,我在本地环境中使用Valet。我的依存关系中也安装了"league/flysystem-aws-s3-v3": "^1.0",
。使用修补匠时出现相同的错误。谢谢。
filesystems.php
...
's3' => [
'driver' => 's3',
'version' => 'latest',
'credentials' => array(
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
],
...
.env
...
AWS_ACCESS_KEY_ID=ASTRINGOFNUMBERSANDLETTERS
AWS_SECRET_ACCESS_KEY=anotherstrngofnumbersandletters
AWS_DEFAULT_REGION=us-west-1
AWS_BUCKET=bucket-name
...
PostController.php
...
if ($request->has('photo')) {
// Get image file
$image = $request->file('photo');
// Make a image name based on user name and current timestamp
$name = Str::slug($request->input('user_id')).time();
// Define folder path
$folder = '/uploads/posts/' . $user_id . '/';
// Make a file path where image will be stored [ folder path + file name + file extension]
$filePath = $folder . $name. '.' . $image->getClientOriginalExtension();
// Upload image
$this->uploadOne($image, $folder, 's3', $name);
// Set user profile image path in database to filePath
$post->photo = $filePath;
}
...
答案 0 :(得分:0)
您应该检查它实际使用的哪个版本的AWS PHP SDK,好像它小于我相信的版本3(不确定是哪个版本对其进行了更改,抱歉),然后不需要凭据数组,您只需传递密钥即可并根据区域和存储桶值直接进行秘密操作。
例如这样的
:...
's3' => [
'driver' => 's3',
'version' => 'latest',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
],
...
您还应该查看将.aws / credentials复制到Web服务器主目录作为测试,以查看www用户在读取文件时遇到问题是否是权限问题。不过,将其作为永久解决方案不是一个好主意,您最好使用参数存储来存储值并以这种方式访问它们。您需要更新角色的权限以允许对此进行访问,但这是配置事物的一种更为安全的方法。