美文网首页
laravel oss文件上传到阿里云

laravel oss文件上传到阿里云

作者: zhaoxiaohui520 | 来源:发表于2021-11-21 21:09 被阅读0次

需要自己注册阿里云账号并且开通oss服务,建立Bucket存储空间


image.png
image.png
image.png

使用composer在项目根目录执行以下命令 composer require johnlui/aliyun-oss:~2.0

image.png

构建 Service 文件 需要自己手动建立 app/services/OSS.php

image.png

只需要修改下面的信息,变成自己的阿里云AccessKeyId AccessKeySecret就可以,注意OSS.php 文件中 private $city = ‘青岛’; 所对应的城市,要根据自己OSS相对应的地区所选择,如何查看自己的OSS地区,请到阿里云OSS中查看,修改错误会导致无法连接到阿里云OSS服务器

<?php
namespace App\Services;
use JohnLui\AliyunOSS;
use Exception;
use DateTime;
class OSS {
  /* 城市名称:
   *  
   *  经典网络下可选:杭州、上海、青岛、北京、张家口、深圳、香港、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜
   *  VPC 网络下可选:杭州、上海、青岛、北京、张家口、深圳、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜
   */    
  private $city = '青岛';
  // 经典网络 or VPC
  private $networkType = '经典网络';
  
  private $AccessKeyId = '';
  private $AccessKeySecret = '';
  private $ossClient;
  /**
   * 私有初始化 API,非 API,不用关注
   * @param boolean 是否使用内网
   */
  public function __construct($isInternal = false)
  {
    if ($this->networkType == 'VPC' && !$isInternal) {
      throw new Exception("VPC 网络下不提供外网上传、下载等功能");
    }
    $this->ossClient = AliyunOSS::boot(
      $this->city,
      $this->networkType,
      $isInternal,
      $this->AccessKeyId,
      $this->AccessKeySecret
    );
  }
  /**
   * 使用外网上传文件
   * @param  string bucket名称
   * @param  string 上传之后的 OSS object 名称
   * @param  string 上传文件路径
   * @return boolean 上传是否成功
   */
  public static function publicUpload($bucketName, $ossKey, $filePath, $options = [])
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->uploadFile($ossKey, $filePath, $options);
  }
  /**
   * 使用阿里云内网上传文件
   * @param  string bucket名称
   * @param  string 上传之后的 OSS object 名称
   * @param  string 上传文件路径
   * @return boolean 上传是否成功
   */
  public static function privateUpload($bucketName, $ossKey, $filePath, $options = [])
  {
    $oss = new OSS(true);
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->uploadFile($ossKey, $filePath, $options);
  }
  /**
   * 使用外网直接上传变量内容
   * @param  string bucket名称
   * @param  string 上传之后的 OSS object 名称
   * @param  string 上传的变量
   * @return boolean 上传是否成功
   */
  public static function publicUploadContent($bucketName, $ossKey, $content, $options = [])
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->uploadContent($ossKey, $content, $options);
  }
  /**
   * 使用阿里云内网直接上传变量内容
   * @param  string bucket名称
   * @param  string 上传之后的 OSS object 名称
   * @param  string 上传的变量
   * @return boolean 上传是否成功
   */
  public static function privateUploadContent($bucketName, $ossKey, $content, $options = [])
  {
    $oss = new OSS(true);
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->uploadContent($ossKey, $content, $options);
  }
  /**
   * 使用外网删除文件
   * @param  string bucket名称
   * @param  string 目标 OSS object 名称
   * @return boolean 删除是否成功
   */
  public static function publicDeleteObject($bucketName, $ossKey)
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->deleteObject($bucketName, $ossKey);
  }
  /**
   * 使用阿里云内网删除文件
   * @param  string bucket名称
   * @param  string 目标 OSS object 名称
   * @return boolean 删除是否成功
   */
  public static function privateDeleteObject($bucketName, $ossKey)
  {
    $oss = new OSS(true);
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->deleteObject($bucketName, $ossKey);
  }
  /**
   * -------------------------------------------------
   *
   * 
   *  下面不再分公网内网出 API,也不注释了,大家自行体会吧。。。
   *
   * 
   * -------------------------------------------------
   */
  public function copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey)
  {
    $oss = new OSS();
    return $oss->ossClient->copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey);
  }
  public function moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey)
  {
    $oss = new OSS();
    return $oss->ossClient->moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey);
  }
  // 获取公开文件的 URL
  public static function getPublicObjectURL($bucketName, $ossKey)
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->getPublicUrl($ossKey);
  }
  // 获取私有文件的URL,并设定过期时间,如 \DateTime('+1 day')
  public static function getPrivateObjectURLWithExpireTime($bucketName, $ossKey, DateTime $expire_time)
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->getUrl($ossKey, $expire_time);
  }
  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);
  }
  public static function getObjectMeta($bucketName, $ossKey)
  {
    $oss = new OSS();
    return $oss->ossClient->getObjectMeta($bucketName, $ossKey);
  }
}
放入自动加载
 
在 composer.json 中 autoload -> classmap 处增加配置:
 
“autoload”: {
“classmap”: [
“app/services”
]
}

然后运行 composer dump-autoload
获取文件路径

创建控制器类 Util/UploadController 控制器用于接收前台上传的图片,上传到阿里云OSS,并且拿到返回路径。Bucket名称名称换成自己的
创建控制器类 Util/UploadController 控制器用于接收前台上传的图片,上传到阿里云OSS,并且拿到返回路径。Bucket名称名称换成自己的

控制器的使用

namespace App\Http\Controllers\Util;
 
use App\Http\Controllers\Controller;
use App\Services\OSS;
use Illuminate\Http\Request;
 
class UploadController extends Controller
{
    public function upload(Request $request)
    {
    //获取上传的文件
    $file = $request->file('file');
    //获取上传图片的临时地址
    $tmppath = $file->getRealPath();
    //生成文件名
    $fileName = str_random(5) . $file->getFilename() . time() .date('ymd') . '.' . $file->getClientOriginalExtension();
    //拼接上传的文件夹路径(按照日期格式1810/17/xxxx.jpg)
    $pathName = date('Y-m/d').'/'.$fileName;
    //上传图片到阿里云OSS
    OSS::publicUpload('Bucket名称', $pathName, $tmppath, ['ContentType' => $file->getClientMimeType()]);
    //获取上传图片的Url链接
    $Url = OSS::getPublicObjectURL('Bucket名称', $pathName);
    // 返回状态给前端,Laravel框架会将数组转成JSON格式
    return ['code' => 0, 'msg' => '上传成功', 'data' => ['src' => $Url]];
}
}
//模型使用,控制器调取使用即可
<?php
 
namespace App\Model;
use App\Services\OSS;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
 
class design extends Model
{
    protected $table="";
    public $timestamps = false;
 
    public static function uploadOss($file)
    {
        if (!$file) {
            exit("请上传图片");
        }
        // 文件是否上传成功
        if ($file->isValid()) {
            // 获取文件相关信息
            $originalName = $file->getClientOriginalName(); // 文件原名
            $ext = $file->getClientOriginalExtension();     // 扩展名
            $realPath = $file->getRealPath();   //临时文件的绝对路径
            $type = $file->getClientMimeType();     // image/jpeg
            $content = date('Y-m-d H:i:s') . '-' . uniqid() . '.' . $ext;
            //上传图片到阿里云OSS
            OSS::publicUpload('$Bucket名字', $content,  $realPath, ['ContentType' => $file->getClientMimeType()]);
            //获取上传图片的Url链接
            $Url = OSS::getPublicObjectURL('$Bucket名字',  $content);
            // 返回结果
            if($Url){
                return $Url;
            }else{
                return exit('文件上传失败');
            }
        }
    }
 
}

原文链接:https://blog.csdn.net/qq_43638176/article/details/96489427

相关文章

  • laravel oss文件上传到阿里云

    需要自己注册阿里云账号并且开通oss服务,建立Bucket存储空间 使用composer在项目根目录执行以下命令 ...

  • 将阿里云OSS的Bucket挂载到Linux本地

    我在上一篇博客Linux本地数据上传到阿里云OSS中介绍了如何将linux本地的数据上传到阿里云的OSS,在这篇博...

  • 笔记3

    1、基于SpringBoot的文件上传 直接上传到应用服务器 上传到OSS(阿里云、七牛云) 前段将图片转成Bas...

  • 4、基于SpringBoot的文件上传——前后端不分离

    基于SpringBoot的文件上传方式有:1、直接上传到应用服务器2、上传到OSS(阿里云、七牛云)3、前端将图片...

  • 文件的上传

    基于SpringBoot的文件上传 上传方式: 1.直接上传到应用服务器 2.上传到OSS(阿里云、七牛云) 3....

  • 导出数据到阿里云OSS

    最近碰到需要将大文件(大于5G)上传到阿里云的OSS上,结果发现osscmd 并不支持大文件的上传,需要使用Ali...

  • Phalcon + 阿里云OSS 加载

    # 阿里云OSS云存储OSS加载Composer文件 在loader.php 文件中,加入 ``` requir...

  • 基于springboot的文件上传

    文件上传方式 直接上传到应用服务器 上传到oss(阿里云,七牛云) 前端将图片转成Base64编码上传 上传服务器...

  • element 上传文件到阿里云OSS记录

    vue 通过element el-upload上传到阿里云仓库的步骤 安装ali-oss 新建配置文件,如ali_...

  • 前端直传阿里云OSS上

    前端值传到阿里云OSS服务器上。 返回参数说明 参数名类型说明accessidstringOSSAccessKey...

网友评论

      本文标题:laravel oss文件上传到阿里云

      本文链接:https://www.haomeiwen.com/subject/mdimtrtx.html