laravel Dcat Admin 入门应用(五)文件上传之OSS自定义上传

laravel Dcat Admin 入门应用(五)文件上传之OSS自定义上传

Dcat Admin 是一个基于 Laravel-admin 二次开发而成的后台构建工具,只需很少的代码即可构建出一个功能完善的高颜值后台系统。支持页面一键生成 CURD 代码,内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的 HTML 代码。
数据表单通过以下的调用来生成图片/文件上传表单,支持本地和云存储的文件上传,该文章介绍如何通过自定义上传路径处理文件上传和将文件存储到阿里云OSS。

1、上传组件是基于webuploader实现的,具体的使用配置可参考webuploader官方文档。

2、通过自定义上传地址,实现定制化处理上传文件

3、使用juhedata/aliyun-oss组件完成oss图片上传

福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全

自定义文件上传

创建文件上传表单

    /**
     * 表单图片上传
     *
     * @param Form $form
     */
    protected function formImg(Form $form)
    {
        $form->image('img', '图片')
            ->autoUpload() //选择图片后自动上传
            ->disableRemove() //禁止删除数据库存储的文件地址:防止误删
            ->disableAutoSave() //禁止上传成功后自动保存到数据库:根据项目需求
            ->accept('jpg,png,gif,jpeg', 'image/*') //设置上传类型
            ->maxSize(500) //文件尺寸
            ->url('tools/upload/file') //这里是重点,通过自定义的文件上传地址定制化处理
            ->rules(['string', 'max:250'])
            ->required();
    }

添加自定义上传路由

    $router->any('upload/file/banner', 'UploadController@handle');

创建自定义处理

自定义上传处理需要使用HasUploadedFile这个trait,一些响应方法和上传文件获取

通过 return t h i s − > r e s p o n s e U p l o a d e d ( this->responseUploaded( this>responseUploaded(url, $url);返回上传成功响应

OssUpload完成上传trait

<?php

namespace App\Admin\Controllers\Tools;

use App\LocalTraits\OssUpload;
use Dcat\Admin\Traits\HasUploadedFile;
use Illuminate\Http\Request;

class UploadController
{
    use HasUploadedFile, OssUpload;

    /**
     * 上传文件到oss
     *
     * @param Request $request
     * @param string $type
     * @return \Illuminate\Http\JsonResponse
     */
    public function handle(Request $request, $type = 'banner')
    {
        //判断上传类型和文件上传规则是否存在
        if (!isset($this->allowDir[$type]) || !isset($this->{$this->allowDir[$type]})) {
            return $this->responseErrorMessage(errorMsg(1001));
        }

        $file = $this->file();
        // 上传的文件属性;如 article:文章,校验在 OssUpload 类
        if (!is_file($file)) {
            return $this->responseErrorMessage('上传文件不存在或错误');
        }

        // 判断文件是否上传成功
        if (method_exists($file, 'isValid') && $file->isValid()) {
            // 校验上传的文件
            if (($url = $this->uploadFile($file, $type) && is_numeric($url)) {
                return $this->responseErrorMessage($url.errorMsg($url, '文件上传异常'));
            }
            return $this->responseUploaded($url, $url);
        }
        return $this->responseErrorMessage('文件上传失败');
    }
}

安装juhedata/aliyun-oss

安装上传组件

composer require juhedata/aliyun-oss

添加OSS文件

OSS文件复制到App/Services目录下或自定义的位置

OssUpload处理上传

  /**
     * 上传示例:可以自行扩展
     *
     * @param $file
     * @param string $dir
     * @param string $rule
     * @return bool|int|string
     */
    protected function uploadFile($file, $dir = 'banner')
    {
        $bucket = 'sdkcn';

        $filePath = $file->path();

        $extension = $file->guessClientExtension();

        $imgName = time() . '-' . mb_substr(md5("sdk-img:" . $rule), 8, 16);
        $pathName = $dir . '/img/' . date('Ym') . '/' . $imgName . '.' . $extension;

        try {
            OSS::publicUpload($bucket, $pathName, $filePath, ['ContentType' => $file->getMimeType()]);
          
            return OSS::getPublicObjectURL($bucket, $pathName) . $suffix;
        } catch (Exception $e) {
            return 1006;
        }
    }

福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值