PHP使用阿里云对象存储oss

news2025/8/12 16:02:57

目录

1.使用composer安装依赖

2.编写代码

3.调用

4.遇到问题

(1) 上传成功 访问发现没有权限

(2) 接着访问,发现直接下载

(3) 上传文件 发现文件内容是空

5.自定义域名上传文件

(1) 配置:

(2) 代码修改


1.使用composer安装依赖

composer require aliyuncs/oss-sdk-php

目录结构如下:

2.编写代码

<?php
/*
 * 阿里云oss对象文件存储
 */

require_once __DIR__ . '/vendor/autoload.php';

use OSS\OssClient;
use OSS\Core\OssException;

class OssHandle
{
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录https://ram.console.aliyun.com创建RAM账号。
    private static $accessKeyId = "你的AccessKey";

    private static $accessKeySecret = "你的 AccessKeySecret";

    // Endpoint按实际情况填写
    private static $endpoint = "你的bucket外网域名";

    protected static $client;

    public function __construct()
    {
        self::$client = $this->getOssClient();
    }

    /**
     * 设置Oss client
     * @return OssClient|string
     */
    protected function getOssClient()
    {
        try {
            return new OssClient(self::$accessKeyId, self::$accessKeySecret, self::$endpoint);
        } catch (OssException $e) {
            print_r($e->getMessage());
            return '';
        }
    }

    /**
     * 创建bucket
     * @param $bucketName
     * @return null
     */
    public function createBucket($bucketName)
    {
        return self::$client->createBucket($bucketName);
    }

    /**
     * 上传文件到oss
     * @param $bucketName
     * @param $fileName :文件夹及文件名称
     * @param $local_file :本地文件路径
     * @return null
     */
    public function uploadOssFile($bucketName, $fileName, $local_file)
    {
        // $fileName 表示上传文件到OSS时需要指定包含文件后缀,不包含Bucket名称在内的完整路径,例如abc/efg/123.jpg。
        try {
            return self::$client->uploadFile($bucketName, $fileName, $local_file);
        } catch (OssException $e) {
            print_r($e->getMessage());
            return '';
        }
    }

    /**
     * 删除oss文件
     * @param $bucketName
     * @param $fileName
     * @return string|null
     */
    public function delOssFile($bucketName, $fileName)
    {
        // $fileName 表示删除OSS文件时需要指定包含文件后缀,不包含Bucket名称在内的完整路径,例如abc/efg/123.jpg
        try {
            return self::$client->deleteObject($bucketName, $fileName);
        } catch (OssException $e) {
            print_r($e->getMessage());
            return '';
        }
    }
}

3.调用

require_once 'OssHandle.php';

$obj = new OssHandle();
// fileName 除bucket名称外 包含文件路径(文件夹)和文件名称
// local_file 绝对地址 或相对地址
$info = $obj->uploadOssFile('你的bucket', 'uploads/other/1.jpg', '../images/1.jpg');
print_r($info);

// fileName 除bucket名称外 包含文件路径(文件夹)和文件名称
$bool = $obj->delOssFile('你的bucket', 'uploads/other/2.jpg');
print_r($bool);

4.遇到问题

(1) 上传成功 访问发现没有权限

提示:AccessDenied You have no right to access this object because of bucket acl.

解决 修改权限

(2) 接着访问,发现直接下载

解决:

配置自定义域名解析

在访问后,问题解决

(3) 上传文件 发现文件内容是空

额 原来是用了字符串上传方式 “putObject”

换成文件上传方式“uploadFile”后解决

5.自定义域名上传文件

(1) 配置:

参考上面自定义域名解析

(2) 代码修改

如下:

// Endpoint按实际情况填写
private static $endpoint = "http://oss.solveset.net";
//private static $endpoint = "http://oss-cn-beijing.aliyuncs.com";

/**
 * 设置Oss client
 * @return OssClient|array
 */
protected function getOssClient()
{
    # true为开启CNAME。CNAME是指将自定义域名绑定到存储空间上
    return new OssClient(self::$accessKeyId, self::$accessKeySecret, self::$endpoint, true);
}

最后,上传完成。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

技术笔记Android应用MediaPipe(一):Windows安装MediaPipe

一、MediaPipe概述 MediaPipe提供跨平台&#xff0c;为实时流媒体提供自定义的机器学习解决方案的应用框架。MediaPipe的主要特点&#xff1a; &#xff08;1&#xff09;端对端的加速&#xff1a;内置快速机器学习推理和处理&#xff0c;使得在普通硬件中也能加速使用。 &…

电瓶车、汽车智慧充电站可提高运营利润,缩短投资回收周期!

安科瑞 李可欣 具体可咨询&#xff1a;Acrel_lkx 需求分析 传统充电站现状 充电站用户需求 建设智慧充电站&#xff0c;解决传统充电站痛点 安科瑞充电站解决方案 保障配电可靠&#xff0c;解决运维难的问题&#xff0c;降低人力成本 确保用电安全&#xff0c;及时切除隐患…

数云融合丨重构传统商贸数字化解决方案

随着5G技术的高速发展&#xff0c;我们迎来了数字化的新阶段&#xff0c;中国也正在加快步入新的消费时代。 数字化的发展带来的多元下消费力的提升&#xff0c;让传统商贸行业迎来数字化产业升级的十字路口&#xff0c;今天我们就来聊一聊数字化对传统商贸的重构。 传统商贸面…

LQ0204 振兴中华【递归】

题目来源&#xff1a;蓝桥杯2013初赛 C A组C题 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明参加了学校的趣味运动会&#xff0c;其中的一个项目是&#xff1a;跳格子。 地上画着一些格子&#xff0c;每个…

这些编程语言你需要了解一下

2022 年最受欢迎的语言 1、Python Python 位居 2022 年最受欢迎的语言榜首&#xff0c;并且鉴于多种原因成为最适合学习的编程语言之一。Python 是一种通用的服务器端编程语言&#xff0c;可用于从简单的脚本和自动化到复杂的 Web 应用程序和人工智能的许多方面。此外&#xf…

电科大离散数学-3-谓词逻辑-1

目录 3.1 谓词的引入 3.1.1 个体词 3.1.2 谓词 3.1.3 复合命题的谓词符号化 3.2 量词的引入 3.2.1 量词 3.2.2 谓词逻辑符号化的两条规则 3.2.3 量词相关的真值确定 3.2.4 谓词翻译和真值 3.2.5 个体域有限的情况 3.3 谓词符号化举例 3.3.1 谓词逻辑符号化示例一 …

gdb调试的插件安装——gef插件

以下博客中的链接都是大佬们提供的链接 gef插件源地址&#xff1a;https://github.com/hugsy/ 根据要求&#xff1a; gdb必须得8.0以上&#xff0c;python得3.6以上&#xff0c;但是一般裸机的gdb都是7.2&#xff0c;python是2.7。我们需要下载更高版本的gdb和python 先将系统…

15、volume

Volume 的生命周期独立于容器&#xff0c;Pod 中的容器可能被销毁和重建&#xff0c;但 Volume 会被保留。本质上&#xff0c;Kubernetes Volume 是一个目录。当Volume被mount到Pod&#xff0c;Pod中的所有容器都可以访问这个Volume。Kubernetes Volume 也支持多种 backend 类型…

菊风入选2022·爱分析保险科技厂商报告,为保险行业数智化转型赋能

随着数字化转型加速及大数据、人工智能等技术的日益精进&#xff0c;保险公司纷纷布局互联网赛道&#xff0c;采取“保险”与“科技”相结合的双引擎战略&#xff0c;赋予客户更快“速度”更暖“温度”的服务体验。可以说&#xff0c;保险科技作为保险和科技融合创新的成果与生…

如何给视频加水印标记?分享三个好用方法给你

现在给视频加水印已经不再单单是起到一个防盗的作用了&#xff0c;还可以是标明视频的出处或者著作权&#xff0c;甚至是打广告等作用&#xff0c;尤其是要上传到一些视频网站的视频&#xff0c;更应该打上自己专属的水印。那你们知道怎么给视频加水印吗&#xff1f;还不知道的…

Git commit校验工具commitlint的配置与使用

前端环境要求 node&#xff1a; 16.x npm&#xff1a; 8.x Tip&#xff1a;npm版本须大于等于 7.24.2&#xff0c;过低的话可能会导致下面有的命令无法使用&#xff0c;需要手动在 package.json 中自行设置。 工具 husky 操作 git 钩子的工具 commitlint commit 信息校验工…

[附源码]java毕业设计农贸产品交易系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【freeRTOS】操作系统之六-低功耗模式

六&#xff0c;低功耗模式 本章节为大家讲解 FreeRTOS 本身支持的低功耗模式 tickless 实现方法&#xff0c;tickless 低功耗机制是当前小型 RTOS 所采用的通用低功耗方法&#xff0c;比如 embOS&#xff0c;RTX 和 uCOS-III&#xff08;类似方法&#xff09;都有这种机制。ti…

深度学习 Day 19——数据增强

深度学习 Day 19——数据增强 文章目录深度学习 Day 19——数据增强一、前言二、我的环境三、前期工作1、导入依赖项并设置GPU2、加载数据3、配置数据集并进行归一化处理4、可视化数据四、数据增强五、数据增强方式1、将其签入model中2、在Dataset数据集中进行数据增强六、编译…

【金融】经济崛起之中的东南亚

由于全球范围内的重大危机事件&#xff0c;经济贸易摩擦加剧&#xff0c;地区局势动荡不安&#xff0c;全世界主要经济体的经济发展都受到了极大的冲击&#xff0c;但东南亚地区却在这一全球衰退的背景之下给出了即为亮眼的经济表现。东盟国家近年来保持着较高的经济增速&#…

792. 匹配子序列的单词数 : 常规预处理优化匹配过程

题目描述 这是 LeetCode 上的 792. 匹配子序列的单词数 &#xff0c;难度为 中等。 Tag : 「二分」、「哈希表」 给定字符串 s 和字符串数组 words, 返回 words[i] 中是 s 的子序列的单词个数 。 字符串的 子序列 是从原始字符串中生成的新字符串&#xff0c;可以从中删去…

初学者设计PCB,如何检查光绘文件的断头线

设计一款完整的PCB线路板&#xff0c;需要经过很多个繁琐而且复杂的工序。一般主要包括明确产品需求、硬件系统设计、器件选型、PCB绘制、PCB生产打样、焊接调试等步骤。 一般设计师都会有自己积累的设计质量检查清单&#xff0c;其中的条目部分来源于公司或部门的规范、另一部…

Linux开发工具VI/VIM

Linux开发工具VI/VIM 文章目录Linux开发工具VI/VIM一、Linux 软件包管理器 yum语法安装和卸载sl&#xff08;小火车跑动&#xff09;软件包二、编辑器VI/VIM1.基本介绍2.基础使用接下来介绍vim使用正常模式命令集末行模式命令集三、VIM优化总结一、Linux 软件包管理器 yum yum…

大学生个人网页模板 简单网页制作作业成品 极简风格个人介绍HTML网页设计(舞蹈培训网页)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 校园篮球网页设计 | 足球体育运动 | 体育游泳运动 | 兵乓球 | 网球 | 等网站的设计与制作 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 H…

大学生《Web课程谁》期末网页制作 HTML+CSS+JavaScript 网页设计实例 瑜伽网站企业网站制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…