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