对象存储 ( Object Storage Service, 简称 OSS ) OSS 相信大家都听过, 它是阿里云对外提供的海量, 安全和高可靠的云存储服务. 大家可以把自己网站的资源存上面加快自己网站速度, aliyun 官网也有文档不过对于新手来说有点难, 那么这里我给大家推荐一个组件和组件的使用.

johnlui/aliyun-oss 这个组件是 John Lui 作者封装好的组件, 用法超简单, 不过这个组件有许多要注意的地方, 不然出错了, 掉坑里爬不出来!

安装

composer require "johnlui/aliyun-oss"

配置

组件下载完成之后, 作者的 GitHub 上面说需要在 app/config/app.php 中增加四项配置, 我建议在 app/config 下面新建一个 alioss.php 文件然后在添加配置:

<?php
return [  'ossServer' => env('ALIOSS_SERVER', null),                      // 外网'ossServerInternal' => env('ALIOSS_SERVERINTERNAL', null),      // 内网'AccessKeyId' => env('ALIOSS_KEYID', null),                     // key'AccessKeySecret' => env('ALIOSS_KEYSECRET', null),             // secret'BucketName' => env('ALIOSS_BUCKETNAME', null)                  // bucket
];

然后在 .ENV 文件里面把配置信息都填上.

注意

这里有一个大坑, 粗心的朋友一般不会发现, 在填写外网和公网配置的时候, 有的朋友直接在 OSS 管理控制台中把外网和内网一长串的链接复制走, 如下图:

在这个组件中, 桶名称是需要额外填写的, 所以外网和内网哪儿, 只需要填写桶名后面的内容, 如图:

再有一点是填写外网和内网的时候需要加上 http:// 协议, 不然后面出错你又得掉坑半天出不来, 最终配置信息如下图:

构建 Service 文件

后台需要一个 Service 文件, 在 app/Service 下新建一个 oss.php 文件, 由于前面步骤我把配置文件放在 app/config/alioss.php 里面, 所以还要对原作者给出的例子作修改下, 如下代码:

# oss.php
<?phpnamespace App\Services;use JohnLui\AliyunOSS\AliyunOSS;class OSS
{private $ossClient;private static $bucketName;public function __construct($isInternal = false){$serverAddress = $isInternal ? config('alioss.ossServerInternal') : config('alioss.ossServer');$this->ossClient = AliyunOSS::boot($serverAddress,config('alioss.AccessKeyId'),config('alioss.AccessKeySecret'));}public static function upload($ossKey, $filePath){$oss = new OSS(false); // 上传文件使用内网,免流量费$oss->ossClient->setBucket(config('alioss.BucketName'));$res = $oss->ossClient->uploadFile($ossKey, $filePath);return $res;}/*** 直接把变量内容上传到oss* @param $osskey* @param $content*/public static function uploadContent($osskey, $content){$oss = new OSS(false); // 上传文件使用内网,免流量费$oss->ossClient->setBucket(config('alioss.BucketName'));$oss->ossClient->uploadContent($osskey, $content);}/*** 删除存储在oss中的文件** @param string $ossKey 存储的key(文件路径和文件名)* @return*/public static function deleteObject($ossKey){$oss = new OSS(false); // 上传文件使用内网,免流量费return $oss->ossClient->deleteObject(config('alioss.BucketName'), $ossKey);}/*** 复制存储在阿里云OSS中的Object** @param string $sourceBuckt 复制的源Bucket* @param string $sourceKey - 复制的的源Object的Key* @param string $destBucket - 复制的目的Bucket* @param string $destKey - 复制的目的Object的Key* @return Models\CopyObjectResult*/public function copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey){$oss = new OSS(true); // 上传文件使用内网,免流量费return $oss->ossClient->copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey);}/*** 移动存储在阿里云OSS中的Object** @param string $sourceBuckt 复制的源Bucket* @param string $sourceKey - 复制的的源Object的Key* @param string $destBucket - 复制的目的Bucket* @param string $destKey - 复制的目的Object的Key* @return Models\CopyObjectResult*/public function moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey){$oss = new OSS(true); // 上传文件使用内网,免流量费return $oss->ossClient->moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey);}public static function getUrl($ossKey){$oss = new OSS();$oss->ossClient->setBucket(config('alioss.BucketName'));return $oss->ossClient->getUrl($ossKey, new \DateTime("+1 day"));}public static function createBucket($bucketName){$oss = new OSS();return $oss->ossClient->createBucket($bucketName);}public static function getAllObjectKey($bucketName){$oss = new OSS();return $oss->ossClient->getAllObjectKey($bucketName);}/*** 获取指定Object的元信息** @param  string $bucketName 源Bucket名称* @param  string $key 存储的key(文件路径和文件名)* @return object 元信息*/public static function getObjectMeta($bucketName, $osskey){$oss = new OSS();return $oss->ossClient->getObjectMeta($bucketName, $osskey);}}

使用

首先引入命名空间 use App\Services\OSS;, 在 Laravel 5.1 中使用方法如下

// 获取表单提交的图片
$pic = $request->file('pic');
// 判断图片有效性
if (!$pic->isValid()) {  return back()->withErrors('上传图片无效..');
}
// 获取图片在临时文件中的地址
$pic = $pic->getRealPath();
// 制作文件名
$key = time() . rand(10000, 99999999) . '.jpg';
//阿里 OSS 图片上传
$result = OSS::upload($key, $pic);
if ($result) {  // success
} else {// fail
}

注意: 如果你上传长时间没反应的话, 说明你上传使用的是内网, 你得改成外网上传, 找到 Service/oss.php 里面的 upload 方法, 将 $oss = new OSS(true); true 改为 false, 上传程序即可成功!

附上其他使用方法

OSS::upload('文件名', '本地路径'); // 上传一个文件echo OSS::getUrl('某个文件的名称'); // 打印出某个文件的外网链接OSS::createBucket('一个字符串'); // 新增一个 Bucket。注意,Bucket 名称具有全局唯一性,也就是说跟其他人的 Bucket 名称也不能相同。OSS::getAllObjectKey('某个 Bucket 名称'); // 获取该 Bucket 中所有文件的文件名,返回 Array。

原文出处

转载于:https://www.cnblogs.com/jhcyzxx/p/10479898.html

Laravel 使用 Aliyun OSS 云存储相关推荐

  1. 阿里云OSS云存储平台

    阿里云OSS云存储平台实战--图片上传/下载/删除 一.OSS实战要求 使用SpringBoot和OSS实现图片的上传.下载和删除功能, 具体要求如下: 可以使用postman 发送上传请求 /pic ...

  2. 阿里云Oss云存储的使用

    阿里云Oss云存储的使用 阿里云OSS云存储能够实现提供远程的文件上传服务器的功能,简化了文件上传功能.本文章简单描述在IDEAJava项目中通过API使用OSS创建Bucket功能. 一.开通OSS ...

  3. 阿里云STS临时令牌操作OSS云存储

    阿里云STS临时令牌操作OSS云存储 参考:官方文档1官方文档2 STS获取临时令牌操作OSS云存储 项目集成了swagger2自动接口文档,如未集成,需要将@Api.@ApiOperation等注解 ...

  4. 阿里云OSS云存储删除(单个,指定的多个文件)删除文件

    阿里云OSS云存储删除(单个,指定的多个文件)删除文件 配置 pom.xml <!--阿里云OSS 依赖--><dependency><groupId>com.al ...

  5. Java实现操作阿里云OSS云存储详解,含配置和完整代码

    最近使用java代码操作阿里云存储,分享给大家 目录 1.OSS云存储配置 2.获取accessKeyId和accessKeySecret 3.编写SpringBoot代码 3.1pom.xml文件引 ...

  6. OSS云存储概念、在阿里云中如何创建、控制台上传下载删除文件以及访问日志设置

    一.阿里云OSS云存储简介 1.什么是阿里云oss云存储 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务.其数据 ...

  7. 如何删除阿里云OSS云存储bucket

    删除阿里云OSS云存储bucket的步骤 1.登录阿里云,进入到OSS存储管理页面, 2.在页面左侧菜单栏里点击bucket名称进入你已经创建的bucket, 3.然后点击左侧菜单栏进入基础设置, 4 ...

  8. 百度云OSS云存储上传及获取

    百度云OSS云存储上传及获取 需要的小伙们自行获取不懂得可留言 dome地址: 百度云oss上传下载.

  9. 【实战记录】使用阿里云的OSS云存储,上传与删除图片及遇到的问题

    目录 背景 正文内容 1.申请OSS云服务器 2.添加依赖 3.写一个简单的封装类(上传的时候直接调用就好了) 4.调用 5.查看 注意事项: 1.无法删除OSS端文件,路径错误 2.无法删除OSS端 ...

最新文章

  1. 两个要素:人和思考——《软件人才管理的艺术》书评
  2. http各种中的各种timeout
  3. sql 中位数_【PL/SQL 自定义函数】 常用场景
  4. 单链表式并查集应用举例
  5. Java | 使用对数器判断自己的程序是否正确(generateRandomArray)
  6. 实测解决:Initialization failed for ‘httpsstart.spring.io‘ Please check URL, network and proxy settings
  7. php 按行读取并分割字符串
  8. 考研数学线上笔记(一):凯哥极限计算系列课程
  9. Google Python命名规范
  10. 俺是一个IT女白领?
  11. ubuntu配置全局系统代理
  12. win10 请求操作需要提升解决方案
  13. 2022-2028年版全球及中国涂料市场销售运营模式及发展前景预测报告
  14. OneDrive不能上了?DNS被污染,解决方法很简单
  15. ps怎么把图片上面的字去掉
  16. 通过 JFR 与日志深入探索 JVM - 调试 JVM 的工具 WhiteBox API
  17. 6.0无法一键root吗,root一键root
  18. spacemacs org-mode配置GTD
  19. crm客户关系管理系统总结
  20. python之 ffmpeg+opencv绿幕抠图,蒙版绿幕抠图,透明化处理,PIL检测图片是否包含透明通道

热门文章

  1. 数据结构与算法 - 稀疏数组(理解+代码实现案例)
  2. REVERSE-PRACTICE-JarvisOJ-2
  3. mysql文件类型_MyCat教程:实现MySql主从复制
  4. 【BZOJ 3831】【Poi2014】Little Bird(单调队列优化dp)
  5. 【CodeForces - 144B 】Meeting (暴力枚举,水题,计算几何)
  6. 四元数乘法_JPL四元数和Hamilton四元数的区别
  7. modbus与硬件对接Java_java中modbus协议连接
  8. 产生随机数java_java产生随机数的几种方式
  9. mysql爆内存_线上MySQL数据库机器内存爆掉原因分析与解决
  10. java jframe添加面板_JFrame添加组件的两种方式