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

2024-02-29 07:44
文章标签 图片 记录 oss 上传 tp6

本文主要是介绍TP6上传图片到OSS(记录贴),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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.公共方法

<?phpuse 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 (也可以放公共文件里)

<?phpuse 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('');

这篇关于TP6上传图片到OSS(记录贴)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/758038

相关文章

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo