【问题标题】:Uploading image file to google cloud using Laravel使用 Laravel 将图像文件上传到谷歌云
【发布时间】:2018-07-09 06:48:13
【问题描述】:

您好,我正在尝试使用 laravel API 将图像文件上传到谷歌云存储。 我已经通过composer集成了google sdk,我尝试与邮递员联系桶。 这是我的代码。 这是我的控制器

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/'),
],

这就是我所做的一切。我错过了什么吗?需要额外的配置吗?

【问题讨论】:

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


    【解决方案1】:

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

    第二步:在谷歌云存储中创建一个项目,例如项目名称为“My-project”。

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

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

    ##Step 5: 转到 optinon IAM & Admin => Service accounts => Create Service account => Put Service Account name 应该是 Bucket name "my-buckets".=> Check Furnish a new private key and保存然后将下载一个新的 json 文件并将该文件放入项目中。这里我将其重命名为 my-buckets.json。

                          Go to The Project in xampp
    

    第六步:进入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

    [配置->文件系统.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_file 中

    第 8 步:下载 Google SDK 控制台

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

    第 9 步:首先我们没有访问创建 google cloud 的帐户的权限,要获得访问权限,我们需要在 google SDK 控制台中运行 google cloud 命令

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

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

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

    希望您可以将文件从项目上传到云存储 谢谢你

    ****Harisankar.H****

    【讨论】:

    • 你可能会错过一步,gcs驱动在哪里
    【解决方案2】:

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

    【讨论】:

    • 您好,感谢您的回答,但我怀疑它是否存储在 $avatar 中? $avatar = $request->file('头像');因为 Storage::disk('gcs')->put('avatars/'.$me->uuid , $file);这里调用 $file 我可以使用哪一个?
    • 这是我更改的代码,但未存储公共函数 updateAvatar (AvatarUploadRequest $request) { $me = Auth::user(); $file = $request->file('头像')->getClientOriginalExtension(); $disk = Storage::disk('gcs')->put('avatars/'.$me->uuid , $file); $url = $disk->url('头像'. "/" . $me->uuid . ".jpg"); $我->头像= $url; $我->保存();返回 $this->prepareItem($me); }
    • 您是否在 html 表单中添加了 enctype="multipart/form-data"
    猜你喜欢
    • 2015-02-28
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2013-11-30
    • 2014-08-03
    • 1970-01-01
    相关资源
    最近更新 更多