使用Laravel

时间:2018-07-09 06:48:13

标签: laravel google-cloud-storage image-upload

嗨,我尝试使用laravel API将图像文件上传到Google云存储。 我已经通过composer集成了google sdk,并且尝试使用邮递员进行攻击,我正在获取url并存储在我的数据库中,但是图像文件未上传到google cloud的文件夹中。我在其中创建了一个名称为“ avatars”的文件夹桶。 这是我的代码。 这是我的控制器

public function updateAvatar (AvatarUploadRequest $request) {
$me = Auth::user();
$disk = Storage::disk('gcs');
$url = $disk->url('avatars'. "/" . $me->uuid . ".jpg");
$me->avatar = $url;
$me->save();
return $this->prepareItem($me);

}

这是我的filesystems.php文件

'gcs' => [
         'driver' => 'gcs',
         'project_id' => env('GOOGLE_CLOUD_PROJECT_ID', 'my-project-id'),
         'key_file' => env('GOOGLE_CLOUD_KEY_FILE', null),
         'bucket' => env('GOOGLE_CLOUD_STORAGE_BUCKET', 'my-bucket-name'),
         'path_prefix' => env('GOOGLE_CLOUD_STORAGE_PATH_PREFIX', null), 
         'storage_api_uri' => env('GOOGLE_CLOUD_STORAGE_API_URI', 'https://console.cloud.google.com/storage/browser/my-project-id/'), 

],

这一切我都做了。我错过了什么吗?是否需要任何其他配置?

2 个答案:

答案 0 :(得分:1)

这是因为您正在生成url,但未将其存储在磁盘中的文件中, 这是代码示例 拳头从请求中获取文件内容: $avatar = $request->file('avatar') 第二保存到存储: Storage::disk('gcs')->put('avatars/'.$me->uuid , $file);

答案 1 :(得分:-1)

第1步:首先在Google云存储中创建一个帐户,因此,当我们不打算进行“升级”时,您将需要信用卡详细信息,但不会收费,因为这是要确保它不是机器人。

第2步:在Google云存储中创建一个项目,例如,项目名称为“我的项目”。

步骤3:在“我的项目”项目中创建存储桶。例如在这里我创建了“我的桶”

第4步:在存储桶中创建一个文件夹,例如,在这里我创建了一个文件夹名称“头像”。

##步骤5:转到optinon IAM&Admin =>服务帐户=>创建服务帐户=>将服务帐户名称设置为存储桶名称“ my-buckets”。=>选中提供新的私钥并保存,然后将下载一个新的json文件并将其放在项目中。在这里,我将其重命名为my-buckets.json。

                      Go to The Project in xampp

步骤6:转到userController.php

[app-> http-> controllers-> api-> v2-> userController.php]

 $me = Auth::user();
 $file = $request->file('avatar');
 $name= $me->uuid . ".".$file->getClientOriginalExtension();
 $filePath = 'avatars/' . $name;
 $disk = Storage::disk('gcs')->put($filePath, file_get_contents($file));
 $gcs = Storage::disk('gcs');
 $url = $gcs->url('avatars'. "/" . $me->uuid . ".jpg");
 $me->avatar = $url;
 $me->save();
return $this->prepareItem($me);

}

步骤7:转到filesystems.php

[config-> filesystems.php]   为Google云设置驱动程序

'gcs' => [
         'driver' => 'gcs',
         'project_id' => env('GOOGLE_CLOUD_PROJECT_ID', 'my-project-209405'),
         'key_file' => env('GOOGLE_APPLICATION_CREDENTIALS', './my-buckets.json'), // optional: /path/to/service-account.json
         'bucket' => env('GOOGLE_CLOUD_STORAGE_BUCKET', 'my-buckets'),
         'path_prefix' => env('GOOGLE_CLOUD_STORAGE_PATH_PREFIX', null), // optional: /default/path/to/apply/in/bucket
         'storage_api_uri' => env('GOOGLE_CLOUD_STORAGE_API_URI', 'https://storage.googleapis.com/my-buckets/'), // see: Public URLs below

],

将我们在第5步中获得的my-buckets.json路径添加到Key_file

步骤8:下载Google SDK控制台

网址-https://cloud.google.com/sdk/

步骤9:首先,我们没有对创建Google云的帐户的访问权限,要获取访问权限,我们需要在Google SDK控制台中运行Google Cloud命令

运行:gcloud auth login  然后,它将向浏览器打开一个询问我们创建了Google云存储的gmail帐户的权限,并允许google sdk的访问权限,然后将在控制台中显示我们当前的项目。

步骤10:运行命令以启用对象的公共可访问性。我们获取并存储在数据库中的URL没有公开访问

运行:gsutil iam ch allUsers:objectViewer gs://my-buckets

希望您可以将文件从项目上传到Cloud Storage 谢谢

**** Harisankar.H ****