laravel9使用腾讯云cos sdk上传对象无法显示

1. 运行环境

windows10
本地:

1). 当前使用的 Laravel 版本?

laravel9使用腾讯云cos sdk上传对象无法显示

2). 当前使用的 php/php-fpm 版本?

PHP 版本:

laravel9使用腾讯云cos sdk上传对象无法显示

laravel9使用腾讯云cos sdk上传对象无法显示

2. 问题描述?

使用官方提供的sdk上传图片到桶中,无法正常显示图片.
使用laravel自带功能可以正常显示,使用官方提供的sdk就不行。
有没有大佬知道这是什么问题呢?
而且官方的sdk 设置生命周期好像也不行
laravel9使用腾讯云cos sdk上传对象无法显示

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Storage;
use Qcloud\Cos\Client;

class CosController extends Controller
{

    public function upload($path, $image,$name)
    {
        // 将图片上传到腾讯云 COS 并返回路径
        $path = Storage::disk('cos')->putFileAS($path, $image,$name);
        // 如果需要获取完整的访问 URL
        $url = Storage::disk('cos')->url($path);
        return ['code' => 200, 'data' => $url];
    }

    public function cos( $image,$key,$bucket=null)
    {
        $bucketName = env('FILESYSTEM_COS_BUCKET');
        $cosClient = new Client([
            'region' => env('COSV5_REGION', 'ap-shanghai'),
            'credentials' => [
                'appId' => env('COSV5_APP_ID'),
                'secretId' => env('COSV5_SECRET_ID'),
                'secretKey' => env('COSV5_SECRET_KEY'),
            ],
        ]);
        //判断桶名是否存在
        if(!$cosClient->doesBucketExist($bucketName))
        {
            $cosClient->createBucket([
                'Bucket' =>$bucketName, // 格式:examplebucket-1250000000
                'LocationConstraint' => env('COSV5_REGION', 'ap-shanghai'),
            ]);
        }
        $cosClient->upload($bucketName,$key,$image,array('Content-Type'=>'image/jpg'));
    }
}
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

已解决: cloud.tencent.com/document/product...

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Log;
use Qcloud\Cos\Client;
Class CosController extends Controller
{

  public function upload($image,$key){

      $bucketName = env('FILESYSTEM_COS_BUCKET');
      $cosClient = new Client([
          'region' => env('COSV5_REGION', 'ap-shanghai'),
          'credentials' => [
              'appId' => env('COSV5_APP_ID'),
              'secretId' => env('COSV5_SECRET_ID'),
              'secretKey' => env('COSV5_SECRET_KEY'),
          ],
      ]);
      //判断桶名是否存在
      if(!$cosClient->doesBucketExist($bucketName))
      {
          $cosClient->createBucket([
              'Bucket' =>$bucketName, // 格式:examplebucket-1250000000
              'LocationConstraint' => env('COSV5_REGION', 'ap-shanghai'),
          ]);
      }
      //声明周期
      try {
          $result = $cosClient->putBucketLifecycle(array(
              'Bucket' => $bucketName, //格式:BucketName-APPID
              'Rules' => array(
                  array(
                      'Expiration' => array(
                          'Days' => 1,
                      ),
                      'ID' => 'rule01',
                      'Filter' => array(
                          'Prefix' => 'captcha/'
                      ),
                      'Status' => 'Enabled',
                  ),
              )
          ));
      } catch (\Exception $e) {
          // 请求失败
          echo "$e\n";
      }
      try {
//          $result = $cosClient->putObject( array(
//              'Bucket' =>$bucketName, //格式:BucketName-APPID
//              'Key' => $key,
//              'Body' => fopen($image, 'rb'),
//              'ServerSideEncryption'=>'AES256'
//          ));
       $result=$cosClient->upload(   $bucket =$bucketName, //存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket
           $key = $key, //此处的 key 为对象键
           $body = fopen($image, 'rb'));
          $res =  $result->toArray();
          return $result['Location'];
      } catch (\Exception $e) {
          Log::error('cos exception:'.$e->getMessage());
          return false;
      }




  }


}
1个月前 评论
讨论数量: 2

已解决: cloud.tencent.com/document/product...

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Log;
use Qcloud\Cos\Client;
Class CosController extends Controller
{

  public function upload($image,$key){

      $bucketName = env('FILESYSTEM_COS_BUCKET');
      $cosClient = new Client([
          'region' => env('COSV5_REGION', 'ap-shanghai'),
          'credentials' => [
              'appId' => env('COSV5_APP_ID'),
              'secretId' => env('COSV5_SECRET_ID'),
              'secretKey' => env('COSV5_SECRET_KEY'),
          ],
      ]);
      //判断桶名是否存在
      if(!$cosClient->doesBucketExist($bucketName))
      {
          $cosClient->createBucket([
              'Bucket' =>$bucketName, // 格式:examplebucket-1250000000
              'LocationConstraint' => env('COSV5_REGION', 'ap-shanghai'),
          ]);
      }
      //声明周期
      try {
          $result = $cosClient->putBucketLifecycle(array(
              'Bucket' => $bucketName, //格式:BucketName-APPID
              'Rules' => array(
                  array(
                      'Expiration' => array(
                          'Days' => 1,
                      ),
                      'ID' => 'rule01',
                      'Filter' => array(
                          'Prefix' => 'captcha/'
                      ),
                      'Status' => 'Enabled',
                  ),
              )
          ));
      } catch (\Exception $e) {
          // 请求失败
          echo "$e\n";
      }
      try {
//          $result = $cosClient->putObject( array(
//              'Bucket' =>$bucketName, //格式:BucketName-APPID
//              'Key' => $key,
//              'Body' => fopen($image, 'rb'),
//              'ServerSideEncryption'=>'AES256'
//          ));
       $result=$cosClient->upload(   $bucket =$bucketName, //存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket
           $key = $key, //此处的 key 为对象键
           $body = fopen($image, 'rb'));
          $res =  $result->toArray();
          return $result['Location'];
      } catch (\Exception $e) {
          Log::error('cos exception:'.$e->getMessage());
          return false;
      }




  }


}
1个月前 评论

这也太不优雅了, 在 控制器用 env 方法, 运行 php artisan config:cache 直接 项目就各种报错;

4周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!