使用Laravel将图像文件上载到google云

使用Laravel将图像文件上载到google云,laravel,google-cloud-storage,image-upload,Laravel,Google Cloud Storage,Image Upload,嗨,我正在尝试使用LaravelAPI将图像文件上传到谷歌云存储。 我通过composer集成了google sdk,并尝试与邮递员联系。我正在获取url并将其存储在数据库中,但图像文件没有上传到google cloud的文件夹中。我在bucket中创建了一个名为“avatars”的文件夹。 这是我的密码。 这是我的控制器 public function updateAvatar (AvatarUploadRequest $request) { $me = Auth::user();

嗨,我正在尝试使用LaravelAPI将图像文件上传到谷歌云存储。 我通过composer集成了google sdk,并尝试与邮递员联系。我正在获取url并将其存储在数据库中,但图像文件没有上传到google cloud的文件夹中。我在bucket中创建了一个名为“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/'),
],

这就是我所做的一切。我遗漏了什么吗?需要任何其他配置吗?

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

第1步:首先在谷歌云存储中创建一个帐户,您需要信用卡详细信息,但不收费,因为我们不打算“升级”,这是为了确保它不是机器人。 第二步:在谷歌云存储中创建一个项目,例如项目名为“我的项目”。 步骤3:在项目“我的项目”中创建一个Bucket。例如,我在这里创建了“我的桶” 步骤4:在bucket中创建一个文件夹,例如,我在这里创建了一个文件夹名“avatars”。 ##步骤5:转到optinon IAM&Admin=>Service accounts=>Create Service account=>Put Service account name应为Bucket name“my Bucket”。=>选中“提供一个新的私钥并保存”,然后将下载一个新的json文件并将该文件放入项目中。在这里,我将其重命名为my-Bucket.json。 步骤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] 为谷歌云设置一个驱动程序

'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_文件中

步骤8:加载Google SDK控制台 Url-

步骤9:首先,我们无法访问创建google cloud的帐户,要获得访问权限,我们需要在google SDK控制台中运行google cloud命令 运行:
gcloud auth login
然后它会打开brouser a,询问我们创建google云存储的gmail帐户,并允许google sdk访问,然后它会在控制台中显示我们当前的项目

步骤10:运行命令以启用对象的公共可访问性。我们正在获取并存储在数据库中的URL没有公开访问权限 运行:
gsutil iam ch alluser:objectViewer gs://my bucket

希望您能将您的文件从项目上传到云存储 多谢各位


****Harisankar.H****

您好,谢谢您的回答,但我怀疑它是否存储在$avatar中$化身=$request->file('avatar');因为Storage::disk('gcs')->put('avatars/'。$me->uuid,$file);这里是调用$file的代码,我可以使用哪一个?这里是我修改过的代码,但它没有存储的公共函数updateAvatar(AvatarUploadRequest$request){$me=Auth::user();$file=$request->file('avatar')->>getClientOriginalExtension();$disk=Storage::disk('gcs')->put('avatars/'.$me->uuid,$file);$url=$disk->url('avatars')。“/”$me->uuid。“.jpg”);$me->avatar=$url;$me->save();return$this->prepareItem($me);}您是否在html表单中添加了
enctype=“multipart/form data”
您可能会错过一个步骤,gcs驱动程序在哪里
'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