php 亚马逊AWS-S3对象存储上传文件

最近做国外项目的时候,需要把文件上传到AWS-S3对象存储空间里,下面整理一下上传方法,和碰到的问题

代码

php 复制代码
 /**
 * 亚马逊oss Aws上传
 * composer require aws/aws-sdk-php
 * @param $filePath
 * @param $ossPath
 * @return array
 * @author wzb
 * @data 2024/5/25
 */
function ossAwsUploadFile($filePath = '', $ossPath = '')
{
    // 配置信息  composer require aws/aws-sdk-php
    $configOss = config('aws_oss');
    $accessKeyId = $configOss['accessKeyId'] ?? '';  // 你的AccessKeyId
    $accessKeySecret = $configOss['accessKeySecret'] ?? '';  // 你的AccessKeySecret
    $endpoint = $configOss['region'] ?? ''; // 你的Bucket所在地域的域名 ap-southeast-1
    $bucket = $configOss['bucket'] ?? ''; // 你的Bucket名字
    if (empty($accessKeyId) || empty($accessKeySecret) || empty($endpoint) || empty($bucket)) {
        return [];
    }
    $awsConfig = [
        'version' => 'latest',//版本
        'acl' => 'public-read',//权限//这个一定要加,是访问权限
        'bucket' => $bucket,//存储桶名称
        'region' => $endpoint,
        'key_id' => $accessKeyId,//Access key ID
        'access_key' => $accessKeySecret,//Secret access key
    ];
    //实例化
    $s3 = new S3Client([
        'version' => $awsConfig['version'],//版本
        'region' => $awsConfig['region'],//区域
        'credentials' => new Credentials(
            $awsConfig['key_id'],
            $awsConfig['access_key']
        ),
        // 开启bug调试
//            'debug' => true
    ]);
    if (!file_exists($filePath)) {
        return [];
    }
    try {
        $result = $s3->putObject([
            'Bucket' => $awsConfig['bucket'],
            'ACL' => $awsConfig['acl'],//这个一定要加,是访问权限
            'Key' => $ossPath,   // //亚马逊静态资源服务器上的路径+图片名称
//                'Body' => fopen($filePath, 'r'),
            'SourceFile' => $filePath,  // 原文件路径
        ]);
        $result = $result->toArray();
        $imgUrl = $result['ObjectURL'] ?? '';
        return $result;
    } catch (Exception $exception) {
        echo $exception->getMessage();
        return [];
    }
}

// 调用示例
 $ossInfo = ossAwsUploadFile("F:/wzb/img/5836923c44342.jpg", 'img/5836923c44342.jpg');

碰到的问题

一直报AWS HTTP error: cURL error 60: SSL certificate problem: unable to get local issuer certificate的问题:

下面详细报错信息:

PutObject" on "https://ss.amazonaws.com/img/5836923c44342.jpg"; AWS HTTP error: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://ss.amazonaws.com/img/5836923c44342.jpg

解决办法

php.ini里面的 curl.cainfo 需要设置

  1. 下载cacert: https://curl.haxx.se/ca/cacert.pem

  2. 配置php.ini 并重启

php 复制代码
curl.cainfo = "真实路径/cacert.pem"
相关推荐
独隅12 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
yyuuuzz12 小时前
跨境站点日志时区混乱的排查记录
运维·服务器·网络·云计算·aws·1024程序员节
运维行者_14 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php
且随疾风前行.16 小时前
Paint Cavans高级绘制:[一]Paint画笔高级应用
android·ui
星光开发者16 小时前
基于springboot智慧草场牛羊管理系统-计算机毕设【课程设计】50360
vue.js·spring boot·后端·mysql·php·课程设计·express
weixin_BYSJ198717 小时前
电竞先锋网站---附源码02032
java·vue.js·spring boot·python·django·tomcat·php
郑州光合科技余经理17 小时前
同城小程序开发:同一笔单在用户端和商家端各显示到哪
android·java·开发语言·前端·后端·uni-app·php
pigdreams18 小时前
Google 官方 Android CLI:让AI直接读布局结构而不是用adb截图验证
android·人工智能·adb
2401_8724187819 小时前
互联网公开信息检索完全指南:Google、Yandex、Wayback Machine、DNS、WHOIS、Shodan 等 OSINT 工具大全
开发语言·php
aixingpan20 小时前
aixingpan.cnAPI开发文档:api_docs_trichart_natal_solar_return_transit2接口指南
前端·php