1,在项目的根目录composer.json文件中加入

"aliyuncs/oss-sdk-php": "*";

2,在项目的根目录中运行以下命令

composer update

3,执行成功之后会生成 \vendor\johnlui\aliyun-oss 的依赖包;
4,打开项目根目录的配置文件env 配置oss配置参数;如下图(具体参数到自己oss账户中获取)

5,使用oss 上传图片功能实现后发现图片不能预览,虽说页面展示没问题,直接访问图片路径就自动下载了感觉很不舒服
查看oss文档发现 需要把 OSS_CONTENT_TYPE => ‘image/jpg’;才能在线预览

6,上传-删除的功能代码如下

<?php
declare(strict_types=1);namespace Common\Service;use OSS\OssClient;
use OSS\Core\OssException;
use OSS\Core\OssUtil;class UploadFileService
{/*** 获取OSS配置数据* @return array*/private function ossConfig(){return ['accessId' => env('OSS_ACCESS_ID', ''),'accessKey' => env('OSS_ACCESS_KEY', ''),'endpoint' => env('OSS_ENDPOINT', 'https://oss-cn-hangzhou.aliyuncs.com'),'bucket' => env('OSS_BUCKET', 'wmm-cxtt')];}/*** 上传文件到阿里云* @param $file* @param array $type* @return array*/public function ossUpload($file, $type){try {if ($file["file"]["error"] == 0) {if ($type == 'img') {return self::uploadImg($file);} else {return self::uploadFile($file);}}return hello_error('文件不能为空!');} catch (\Exception $exception) {return hello_error('失败!', $exception->getMessage());}}/*** 上传图片到阿里云* @param $file* @return array*/public function uploadImg($file){try {if ($file['size'] > 10485760) {return hello_error('上传的图片不能大于10MB');}$pixel = getimagesize($file['tmp_name']);//获取图片大小$suffix = explode('.', $file['name']);$pathName = 'admin/imgs/' . date('Y-m') . '/' . uniqid() . '.' . $suffix[1]; //生成文件名$filePath = $file['tmp_name']; //临时文件路径$config = self::ossConfig();$ossClient = new OssClient($config['accessId'], $config['accessKey'], $config['endpoint']);$options = array(OssClient::OSS_CONTENT_TYPE => 'image/jpg');$result = $ossClient->uploadFile($config['bucket'], $pathName, $filePath, $options);if ($result['info']) {$resData = ['url' => $result['oss-request-url'],'src' => $pathName . '?w=' . $pixel[0] . '&h=' . $pixel[1]];return hello_success('上传成功', $resData);}return hello_error('上传失败!');} catch (\Exception $exception) {return hello_error('失败!', $exception->getMessage());}}/*** 富文本编辑器上传文件到阿里云* @param $file* @param $fileName* @return array*/public function uedUploadFile($file, $fileName){try {if ($file['size'] > 10485760) {return hello_error('上传的图片不能大于10MB');}$pathName = 'men_hu/ueditor/' . date('Y-m') . '/' . $fileName; //生成文件名$filePath = $file['tmp_name']; //临时文件路基$config = self::ossConfig();$ossClient = new OssClient($config['accessId'], $config['accessKey'], $config['endpoint']);$options = array(OssClient::OSS_CONTENT_TYPE => 'image/jpg');$result = $ossClient->uploadFile($config['bucket'], $pathName, $filePath, $options);if ($result['info']) {$resData = ['src' => $pathName, 'url' => $result['info']['url']];return hello_success('上传成功', $resData);}return hello_error('上传失败!');} catch (\Exception $exception) {return hello_error('失败!', $exception->getMessage());}}/*** 上传文件到阿里云* @param $file* @return array*/public function uploadFile($file){try {if ($file['size'] > 31457280) {return hello_error('上传的文件不能大于30MB');}$suffix = explode('.', $file['name']);$pathName = 'admin/files/' . date('Y-m') . '/' . uniqid() . '.' . $suffix[1]; //生成文件名$filePath = $file['tmp_name']; //临时文件路基$config = self::ossConfig();$ossClient = new OssClient($config['accessId'], $config['accessKey'], $config['endpoint']);$result = $ossClient->uploadFile($config['bucket'], $pathName, $filePath);if ($result['info']) {$resData = ['src' => $pathName, 'url' => $result['info']['url'], 'size' => $file['size']];return hello_success('上传成功', $resData);}return hello_error('上传失败!');} catch (\Exception $exception) {return hello_error('失败!', $exception->getMessage());}}/*** 文件分片上传* @param $file* @return array*/public function uploadFileByPiece($file){try {$suffix = explode('.', $file['name']);$pathName = 'men_hu/files/' . date('Y-m') . '/' . uniqid() . '.' . $suffix[1]; //生成文件名$uploadFile = $file['tmp_name']; //临时文件路基//步骤1:初始化一个分片上传事件,获取uploadId。$config = self::ossConfig();$ossClient = new OssClient($config['accessId'], $config['accessKey'], $config['endpoint']);$uploadId = $ossClient->initiateMultipartUpload($config['bucket'], $pathName);//步骤2:上传分片。$partSize = 10 * 1024 * 1024;//一片10M$uploadFileSize = filesize($uploadFile);$pieces = $ossClient->generateMultiuploadParts($uploadFileSize, $partSize);$responseUploadPart = array();$uploadPosition = 0;$isCheckMd5 = true;foreach ($pieces as $i => $piece) {$fromPos = $uploadPosition + (integer)$piece[$ossClient::OSS_SEEK_TO];$toPos = (integer)$piece[$ossClient::OSS_LENGTH] + $fromPos - 1;$upOptions = array(// 上传文件。$ossClient::OSS_FILE_UPLOAD => $uploadFile,// 设置分片号。$ossClient::OSS_PART_NUM => ($i + 1),// 指定分片上传起始位置。$ossClient::OSS_SEEK_TO => $fromPos,// 指定文件长度。$ossClient::OSS_LENGTH => $toPos - $fromPos + 1,// 是否开启MD5校验,true为开启。$ossClient::OSS_CHECK_MD5 => $isCheckMd5,);// 开启MD5校验。if ($isCheckMd5) {$contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos);$upOptions[$ossClient::OSS_CONTENT_MD5] = $contentMd5;}try {// 上传分片。$responseUploadPart[] = $ossClient->uploadPart($config['bucket'], $pathName, $uploadId, $upOptions);} catch (OssException $e) {printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} FAILED\n");printf($e->getMessage() . "\n");return;}printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} OK\n");}// $uploadParts是由每个分片的ETag和分片号(PartNumber)组成的数组。$uploadParts = array();foreach ($responseUploadPart as $i => $eTag) {$uploadParts[] = array('PartNumber' => ($i + 1),'ETag' => $eTag,);}//步骤3:完成上传。// 执行completeMultipartUpload操作时,需要提供所有有效的$uploadParts。OSS收到提交的$uploadParts后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。$result = $ossClient->completeMultipartUpload($config['bucket'], $pathName, $uploadId, $uploadParts);if ($result['info']) {$url = explode('?', $result['info']['url']);$resData = ['src' => $pathName, 'url' => $url[0]];return hello_success('上传成功', $resData);}return hello_error('上传失败!');} catch (\Exception $exception) {return hello_error('失败!', $exception->getMessage());}}/*** 删除OSS上指定文件* @param string $fileName* @return array*/function ossDelete($fileName = ''){try {if (empty($fileName)) {return hello_error('需要删除的文件名不能为空!');}$config = self::ossConfig();$ossClient = new OssClient($config['accessId'], $config['accessKey'], $config['endpoint']);if ($ossClient->doesObjectExist($config['bucket'], $fileName)) {$ossClient->deleteObject($config['bucket'], $fileName);return hello_success('删除成功!');} else {return hello_error('图片不存在!');}} catch (\Exception $exception) {return hello_error($exception->getMessage());}}
}

7,更多功能请查看oss官方文档
https://help.aliyun.com/document_detail/88473.html?spm=a2c4g.11186623.6.1091.347d69cbQhXfj4

8、 富文本编辑器上传文件到OSS
https://blog.csdn.net/qq_41688060/article/details/108442965

Laravel框架上传文件到OSS相关推荐

  1. java 上传文件到服务器_java上传文件到OSS云服务器(二)

    上篇文章中已经把接口端和service业务层写了,这次就把OSS上传文件的工具类补上. 一.首先配置好OSS服务器各项节点,这是在springboot中appliaction.yml配置文件中的写法. ...

  2. excel oss 上传_java实现上传文件到oss(阿里云)功能示例

    本文实例讲述了java实现上传文件到oss(阿里云)功能.分享给大家供大家参考,具体如下: 做这个功能之前我们需要导入阿里云OSS官方提供的工具包 aliyun-sdk-oss-2.5.0.jar 这 ...

  3. Android开发笔记(一百一十)使用http框架上传文件

    HTTP上传 与文件下载相比,文件上传的场合不是很多,通常用于上传用户头像.朋友圈发布图片/视频动态等等,而且上传文件需要服务器配合,所以容易被app开发者忽略.就上传的形式来说,app一般采用htt ...

  4. SSM框架上传文件并不刷新页面,并预览图片

    效果图: Jsp代码(样式自己调): <img id="HeadImg" src="" data-bd-imgshare-binded="1&q ...

  5. nginx+lua实现上传文件到OSS

    目录 技术点 openResty 下载安装 示例 oss.lua 文件 测试代码 text.lua nginx 配置 技术点 openResty OpenResty® 是一个基于 Nginx 与 Lu ...

  6. python 上传文件到网络设备_基于python实现上传文件到OSS代码实例

    基础环境 # +++++ 阿里云oss开发指南里都有详细的步骤,在这里整理了一下自己需要的东西 # 确定开发环境,centos默认安装了python2.7 # python -v # 安装python ...

  7. nfine框架 上传文件_网站服务器Nginx运行环境,后台文件上传超出Nginx的最大值...

    解决方法: 1.修改Nginx的配置文件(一般是:nginx/nginx.conf),在 http{} 段中增大nginx上传文件大小限制 #设置允许发布内容为8M client_max_body_s ...

  8. python分片上传_python上传文件到oss

    基础环境 # +++++ 阿里云OSS开发指南里都有详细的步骤,在这里整理了一下自己需要的东西 # 确定开发环境,centOS默认安装了python2.7 # python -V # 安装python ...

  9. nfine框架 上传文件_MVC之Struts2框架--你并不了解的高级应用

    <"爱读书"--给你讲技术>,我来看书,你来进步,让我们开始吧! 本书简介 书名为<轻量级JavaEE企业应用实战>,是本人在学习JavaEE框架的时候阅读 ...

最新文章

  1. H3C 5510 交换机DHCP设置
  2. nssl1216-码灵鼠【数学】
  3. C++子类对象隐藏了父类的同名成员函数(隐藏篇)
  4. win10 tensorflowgpu-2.0安装cuda10.0 +cudnn7.4
  5. JavaScript-数组相关作业
  6. 如何提升Java应用程序性能
  7. python爬虫框架scrapy学习图片下载
  8. linux下mysql定时备份
  9. VariantNet--简易的神经网络做DNA测序
  10. 请问王菲的<流年>歌词的含义
  11. Enterprise Architect综合建模平台
  12. 银河麒麟桌面V10SP1安装nosqlbooster 可视化工具
  13. 407. 接雨水 II【我亦无他唯手熟尔】
  14. 蓝桥云课 鲁卡斯队列
  15. java电商网站建设教程_java开发电商系统实战开发视频教程
  16. 靠窗座位订票技能和退票省钱技能
  17. 为什么成为一名程序员这么难?
  18. 柠檬班性能测试day05-0526-04环境安装配置
  19. 服务器发布Java jar包
  20. 程序员面试100题之六 最长公共子序列

热门文章

  1. HYPODD输入文件.pha读取
  2. YUYV422 转 YUV420 代码
  3. ext3 升级到 ext4
  4. python 编写交互界面
  5. Linux_创建日期格式的文件
  6. 同桌的你1080pHD国语中字
  7. STM32F103单片机串口通信带奇偶校验位
  8. 腾讯云GPU服务器计算型GN、推理性及推理型GI3X和渲染型GN7vw性能详解
  9. 怎么让服务器文件自动备份,服务器文件自动备份
  10. Vue进阶(四十五):精解 ES6 Promise 用法