TP6上传图片到OSS(记录贴)

news2025/2/24 13:37:55

1,先安装,我使用composer安装
在项目的根目录运行composer require aliyuncs/oss-sdk-php

2,安装成功以后vendor目录下可以看到如图:

3,上传图片代码如下:

<?php
namespace app\controller;

use app\BaseController;

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

class Index extends BaseController
{
     /*
    * 图片上传,将图片上传至阿里云oss
    * */
    public function upload(){
        $files = $_FILES['file'];
        $name = $files['name'];
        $format = strrchr($name, '.');//截取文件后缀名如 (.jpg)
        // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
        $accessKeyId = "<yourAccessKeyId>";
        $accessKeySecret = "<yourAccessKeySecret>";
        // Endpoint以杭州为例,其它Region请按实际情况填写。
        $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
        // 设置存储空间名称。
        $bucket= "<yourBucketName>";
        // 设置文件名称。
        //这里是由sha1加密生成文件名 之后连接上文件后缀,生成文件规则根据自己喜好,也可以用md5
        //前面video/head/ 这是我的oss目录
        $object = 'video/head/'.sha1(date('YmdHis', time()) . uniqid()) . $format;;
        // <yourLocalFile>由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt。
        $filePath = $files['tmp_name'];

        try{
            $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

            $result = $ossClient->uploadFile($bucket, $object, $filePath);
            if(!$result){
                return json(['status'=>1,'message'=>'上传失败']);
            }else{
                return json(['status'=>2,'message'=>'上传成功','url'=>$result['info']['url']]);
            }
        } catch(OssException $e) {
            printf(__FUNCTION__ . ": FAILED\n");
            printf($e->getMessage() . "\n");
            return;
        }
        print(__FUNCTION__ . ": OK" . "\n");
    }
}

中途遇到的一些问题

1.没安装或没启用curl拓展,PHP安装curl拓展就好

upload: FAILED
Extension {curl} is not installed or not enabled, please check your php env.

2.上传后地址打开不正确,Bucket权限可能是私有,改成正常读,不然就地址要加权限验证

-------------------------------------------------------------------------------------------------------------------------------

另一种方式:(会先传到本地服务器文件夹再传到oss);

1.公共方法

<?php

use OSS\OssClient;
use OSS\Core\OssException;
use think\facade\Config;
//阿里云OSS
if (!function_exists('aliyun')) {
    /**
     * @param $savePath 文件名称
     * @param string $category oss存储目录
     * @param bool $isunlink
     * @param string $bucket 存储空间名称
     * @return string
     * @throws OssException
     * @throws \OSS\Http\RequestCore_Exception
     */
    function aliyun($savePath,$category='',$isunlink=false,$bucket=""){
        $accessKeyId = Config::get('app.aliyun_oss.accessKeyId');//去阿里云后台获取秘钥
        $accessKeySecret = Config::get('app.aliyun_oss.accessKeySecret');//去阿里云后台获取秘钥
        $endpoint = Config::get('app.aliyun_oss.endpoint');//你的阿里云OSS地址
        $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
        //        判断bucketname是否存在,不存在就去创建
        if( !$ossClient->doesBucketExist($bucket)){
            $ossClient->createBucket($bucket);
        }
        $category=empty($category)?$bucket:$category;

        $savePath = str_replace("\\","/",$savePath);

        $object = $category.'/'.$savePath;//想要保存文件的名称
//        $file = './upload\\'.$savePath;//文件路径,必须是本地的。//发现这个不行,要用绝对路径
        $file = app()->getRootPath() ."public/storage/upload\\".$savePath;//文件路径,必须是本地的。

        try{
            $ossClient->uploadFile($bucket,$object,$file);
            if ($isunlink==true){
                unlink($file);
            }
        }catch (OssException $e){
            $e->getErrorMessage();
        }
        $oss=Config::get('aliyun_oss.url');
        $web = "http://test.oss-cn-hangzhou.aliyuncs.com.aliyuncs.com";//这里是你阿里云oss外网访问的Bucket域名
        return $web.$oss."/".$object;
    }
}

2.在config app中配置阿里云参数

//阿里云配置
    'aliyun_oss' => [
        'accessKeyId'      => '',  //您的Access Key ID
        'accessKeySecret'  => '',  //您的Access Key Secret
        'endpoint'   => 'oss-cn-shanghai.aliyuncs.com',  //阿里云oss 外网地址endpoint
        'bucket'     => '',  //Bucket名称
        'url'           => ''  // 访问的地址 (可不配置)
    ]

3.封装tp6的文件上传方法 并上传oss (也可以放公共文件里)

<?php
 
use think\facade\Filesystem;
 
if (!function_exists('uplodeOss')) {
    function uplodeOss($file){
        //上传到public目录下的storage下的upload目录
        $path = Filesystem::disk('public')->putFile('upload', $file);
//图片路径,Filesystem::getDiskConfig('public','url')功能是获取public目录下的storage,
        $ossPath = substr(strrchr($path, "/"), 1);
//结果是 $picCover = storage/upload/20200825/***.jpg
        $picCover = '/' . str_replace('\\', '/', $path);//图片上传到本地的路径
//上传OSS 并获取阿里云OSS地址
        $image = aliyun($ossPath, '', '', '<yourBucketName>');//第一个参数为图片地址 最后一个为bucket名字 具体参数在上个方法中
        if($image){
            return $image;
        }
    }
}

4.方法中调用

public function upload(){

   $files = request()->file('file');
   $result = uplodeOss($files);

   var_dump($result);
}

不能用 $_FILES,要用request()->file('');

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

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

相关文章

宝塔FTP服务设置并结合cpolar内网穿透实现远程传输文件

文章目录 1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 宝塔FTP是宝塔面板中的一项功能&#xff0c;用于设置和管理FTP服务。通过宝塔FTP&#xff0c;用户可以创建FTP账号&#xff0c;配置FTP用户权限…

D*算法超详解 (D星算法 / Dynamic A*算法/ Dstar算法)(死循环解决--跟其他资料不一样奥)

所需先验知识&#xff08;没有先验知识可能会有大碍&#xff0c;了解的话会对D*的理解有帮助&#xff09;&#xff1a;A*算法/ Dijkstra算法 何为D*算法 Dijkstra算法是无启发的寻找图中两节点的最短连接路径的算法&#xff0c;A*算法则是在Dijkstra算法的基础上加入了启发函数…

数据抽取平台pydatax介绍--实现和项目使用

数据抽取平台pydatax实现过程中&#xff0c;有2个关键点&#xff1a; 1、是否能在python3中调用执行datax任务&#xff0c;自己测试了一下可以&#xff0c;代码如下&#xff1a; 这个str1就是配置的shell文件 try:result os.popen(str1).read() except Exception as …

吴恩达机器学习全课程笔记第四篇

目录 前言 P61-P68 激活函数 Softmax算法 P69-P73 Adam算法 更多类型的层 模型评估 P74-P79 偏差和方差 建立表现基准 学习曲线 偏差和方差与神经网络 前言 这是吴恩达机器学习笔记的第四篇&#xff0c;第三篇笔记请见&#xff1a; 吴恩达机器学习全课程笔记第…

ubuntu20.04 ROS-Noetic 配置qtcreator的ROS环境

文章目录 1 安装qtcreator1.1 下载安装Qt1.2 配置命令启动qtcreator2 配置ROS2.1 直接安装qtcreator-ros2.2 在qtcreator上安装ros_qtc_plugin插件3 注意3.1 构建套件3.2 更新、删除qt4 参考链接1 安装qtcreator QT官网:Qt Downloads 下载包链接:qt5.12.12 Qt5.12.12默认qtc…

如何系统性的学习推荐系统?

推荐一本适合推荐系统、计算广告、个性化搜索领域的从业人员阅读的书&#xff1a;《互联网大厂推荐算法实战》。快手公司算法专家10余年的实战经验总结。涵盖一线互联网公司当前采用的主流推荐算法&#xff0c;凸显可用性、实用性提供从算法基本原理&#xff0c;到技术框架再到…

0代码自动化测试:RF 框架实现企业级 UI 自动化测试!

RobotFramework框架可以作为公司要做自动化 但是又不会代码的一种临时和紧急情况的替代方案&#xff0c;上手简单。 前言 现在大家去找工作&#xff0c;反馈回来的基本上自动化测试都是刚需&#xff01;没有自动化测试技能&#xff0c;纯手工测试基本没有什么市场。 但是很多人…

qml 项目依赖

文章目录 出现的问题最终对比下一步 把 apptestQml3_6.exe 放到一个单独目录下&#xff0c;执行 windeployqt.exe ./apptestQml3_6.exe但是出了很多问题&#xff0c;根本运行不起来。 但是在release目录下执行下&#xff0c;程序能跑起来。 根据错误提示&#xff0c;进行添加。…

浮点数二分(一个数开根号)

#include<iostream> using namespace std; int main(){double x;cin>>x;double l0,rx;while(r-l>1e-8){double mid(lr)/2;if(mid*mid>x)rmid;else lmid;}cout<<l<<endl;return 0; }

IJCAI 2023 |时空数据(Spatial-Temporal)论文

本次IJCAI 2023共收到4566份投稿&#xff0c;接收率大约15%&#xff0c;本文总结了IJCAI 2023有关时空数据&#xff08;spatial-temporal&#xff09;的论文。 时空数据Topic:轨迹异常检测&#xff0c;时空预测&#xff0c;信控优化等。 目录 Open Anomalous Trajectory Reco…

大学生课程|统计基础与python分析8|员工离职预测模型(免费下载所有课程材料)

此系列为基础学习系列&#xff0c;请自行学习&#xff0c;课程资源免费获取地址&#xff1a; https://download.csdn.net/download/weixin_68126662/88866689 久菜盒子工作室&#xff1a;大数据科学团队/全网可搜索的久菜盒子工作室 我们是&#xff1a;985硕博/美国全奖doctor/…

深度学习500问——Chapter02:机器学习基础(1)

文章目录 前言 2.1 基本概念 2.1.1 大话理解机器学习本质 2.1.2 什么是神经网络 2.1.3 各种常见算法图示 2.1.4 计算图的导数计算 2.1.5 理解局部最优与全局最优 2.1.5 大数据与深度学习之间的关系 2.2 机器学习学习方式 2.2.1 监督学习 2.2.2 非监督式学习 2.2.3 …

Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)

文章目录 【1】依赖的范围结论验证①验证 compile 范围对 main 目录有效②验证test范围对main目录无效③验证test和provided范围不参与服务器部署 【2】依赖的传递性①compile 范围&#xff1a;可以传递②test 或 provided 范围&#xff1a;不能传递 【3】依赖的排除 【1】依赖…

利用python爬取本站的所有博客链接

前因 由于自己要把csdn的博客同步到hugo中&#xff0c;把博客转为md格式已经搞好了&#xff0c;但是由于csdn的图片具有防盗链&#xff0c;所以打算把所有的图片爬取下来&#xff0c;然后保存在本地 刚好本人略懂一些python&#xff0c;所以自己先写了一个脚本用来爬取各个博…

【Acwing】差分矩阵

图1&#xff1a;a和b数组映射表 由于a是b的前缀和数组&#xff0c;因此改变b[ x1][ y1]之后&#xff0c;受到影响的a中元素如右半图所示 图2&#xff1a;求b数组的前缀和 #include<bits/stdc.h> using namespace std;int n,m,q; int a[1010][1010]; int b[1010][1010]…

最新 RubyMine 2023.3.4 下载与安装 + 永久免费

文章目录 Stage 1 : 官网下载Stage 2 : 下载工具Stage 3-1 : windows为例Stage 3-2 : mac为例常见问题部分小伙伴 Mac 系统执行脚本遇到如下错误&#xff1a;解决方法&#xff1a; 执行脚本做了啥&#xff1f;和正版区别&#xff1f; Stage 1 : 官网下载 先去官网下载 我这里下…

代码随想录算法训练营第二十四天补|● 回溯理论基础 ● 77. 组合

回溯理论基础、组合问题 回溯理论基础 回溯能解决的问题 回溯的本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案 回溯如何穷举&#xff1a; 横向遍历for循环&#xff0c;纵向遍历backtracking&#xff08;递归&#xff09;&#xff0c;一般来说&#…

(2024,时空 trasnformer,时空视频分词器,自回归动力学模型,潜在行动模型)Genie:生成式交互环境

Genie: Generative Interactive Environments 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2. 方法 2.1. 模型组件 2.2. 推理&#xff1a;可控行动视频生成 3. 实验 0. …

数据库orclec;nvl和nvl2的区别

Oracle中nvl()与nvl2()函数详解-CSDN博客 select nvl(null,2) as vb from dual select nvl2(666,2,3) as vb from dual

异常处理(黑马学习笔记)

当前问题 登录功能和登录校验功能我们都实现了&#xff0c;下面我们学习下今天最后一块技术点&#xff1a;异常处理。首先我们先来看一下系统出现异常之后会发生什么现象&#xff0c;再来介绍异常处理的方案。 我们打开浏览器&#xff0c;访问系统中的新增部门操作&#xff0…