🌾 简单多文件上传插件

v0.3.3 版本
2022-05-05 版本更新时间
203 安装
9 star

简介

Total Downloads

简单易用多文件上传插件。目前支持以下多文件上传

特性

🍏 本地对象存储

  • ✅ 本地多文件上传

🍓 阿里云对象存储

  • ✅ 本地多文件上传
  • Base64图片文件上传
  • ✅ 服务端文件上传

🍋 腾讯云对象存储

  • ✅ 本地多文件上传
  • Base64图片文件上传
  • ✅ 服务端文件上传

🍇 七牛云对象存储

  • ✅ 本地多文件上传
  • Base64图片文件上传
  • ✅ 服务端文件上传

安装

composer require tinywan/storage

使用

基本用法

Tinywan\Storage\Storage::config(); // 初始化。 默认为本地存储:local,阿里云:oss,腾讯云:cos,七牛:qiniu
$res = Tinywan\Storage\Storage::uploadFile();
var_dump(json_encode($res));

上传成功信息

[
    {
        "key": "webman",
        "origin_name": "常用编程软件和工具.xlsx",
        "save_name": "03414c9bdaf7a38148742c87b96b8167.xlsx",
        "save_path": "runtime/storage/03414c9bdaf7a38148742c87b96b8167.xlsx",
        "save_path": "/var/www/webman-admin/public/storage/03414c9bdaf7a38148742c87b96b8167.xlsx",
        "url": "/storage/fd2d472da56c71a6da0a5251f5e1b586.png",
        "uniqid ": "03414c9bdaf7a38148742c87b96b8167",
        "size": 15050,
        "mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        "extension": "xlsx"
    }
    ...
]

成功响应字段

字段 描述 示例值
key 上传文件key webman
origin_name 原始文件名 常用编程软件和工具.xlsx
save_name 保存文件名 03414c9bdaf7a38148742c87b96b8167.xlsx
save_path 文件保存路径(相对) /var/www/webman-admin/runtime/storage/03414c9bdaf7a38148742c87b96b8167.xlsx
url url访问路径 /storage/03414c9bdaf7a38148742c87b96b8167.xlsx
unique_id uniqid 03414c9bdaf7a38148742c87b96b8167
size 文件大小 15050(字节)
mime_type 文件类型 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
extension 文件扩展名 xlsx

上传失败

抛出StorageException异常。

云存储上传SDK支持

阿里云对象存储

composer require aliyuncs/oss-sdk-php

腾讯云对象存储

composer require qcloud/cos-sdk-v5

七牛云云对象存储

composer require qiniu/php-sdk

上传规则

默认情况下是上传到本地服务器,会在runtime/storage目录下面生成以文件流的sha1编码为文件名的文件,例如上面生成的文件名可能是:

runtime/storage/fd2d472da56c71a6da0a5251f5e1b586.png

如果你希望上传的文件是可以直接访问或者下载的话,可以使用public存储方式。

你可以在config/plugin/tinywan/storage/pp.php配置文件中配置上传根目录,例如:

'local' => [
    'adapter' => \Tinywan\Storage\Adapter\LocalAdapter::class,
    'root' => public_path() . '/storage',
],

浏览器访问:http://127.0.0.1:8787/storage/fd2d472da56c71a6da0a5251f5e1b586.png

上传验证

支持使用验证类对上传文件的验证,包括文件大小、文件类型和后缀

字段 描述 示例值
single_limit 单个文件的大小限制,默认200M 1024 * 1024 * 200
total_limit 所有文件的大小限制,默认200M 1024 * 1024 * 200
nums 文件数量限制,默认10 10
include 被允许的文件类型列表 ['xlsx','pdf']
exclude 不被允许的文件类型列表 ['png','jpg']

Base64图片上传

图片的base64编码就是可以将一张图片数据编码成一串字符串,使用该字符串代替图像地址url

使用场景:

  • 电子签名
  • 人脸识别(在线活体实时监测比对)
  • Canvas 截取图片(头像)

请求参数

截图

{
    "base64": "data:image/jpeg;base64,/9j/4AAQSkxxxxxxxxxxxxZJRgABvtyQBIr/MPTPTP/2Q=="
}

请求案例(阿里云)

public function upload(Request $request)
{
    $base64 = $request->post('base64');
    // 第一个参数为存储方式。第二个参数为是否本地文件(默认是)
    Tinywan\Storage\Storage::config(Storage::MODE_OSS, false);
    $r = Tinywan\Storage\Storage::uploadBase64($base64);
    var_dump($r);
}

响应参数

{
    "save_path": "storage/20220402213639624851671439e.png",
    "url": "http://webman.oss.tinywan.com/storage/20220402213639624851671439e.png",
    "unique_id": "20220402213639624851671439e",
    "size": 11802,
    "extension": "png"
}

服务端文件上传

使用场景:

  • 服务端导出文件需要上传到云端存储
  • Nginx日志定时切割备份

请求案例(阿里云)

// 第二个参数要设置为 `false`
Tinywan\Storage\Storage::config(Storage::MODE_OSS, false);
// 本地文件绝对路径
$localFile = runtime_path() . DIRECTORY_SEPARATOR . 'storage/webman.png';
$res = Tinywan\Storage\Storage::uploadServerFile($localFile);
var_dump($res);

响应参数

{
    "origin_name": "/var/www/webman-admin/runtime/storage/webman.png",
    "save_path": "storage/6edf04d7c26f020cf5e46e6457620220402213414.png",
    "url": "http://webman.oss.tinywan.com/storage/6ed9ffd54d0df57620220402213414.png",
    "unique_id": "6edf04d7c26f020cf5e46e6403213414",
    "size": 3505604,
    "extension": "png"
}

效果图(可选)

截图