文件上传

FastAdmin开发框架支持将文件、图片、视频、压缩包等文件快速的上传至本地服务器或云存储,同时支持云存储直传模式和服务器进行中转模式。
你可以直接在后台插件管理安装第三方云存储的插件后使用,目前支持以下云存储平台:

平台特点插件下载
又拍云存储申请加入又拍云联盟可享每月10G存储空间+15G流量下载
七牛云存储实名认证后每月免费10G流量+10GCDN回源流量下载
阿里OSS云存储阿里系、稳定、图片处理、支持挂载为分区下载
Ucloud云存储数据安全可靠、成本灵活可控的海量文件存储服务下载
腾讯COS云存储认证个人用户50G标准存储(6个月),认证企业用户1T标准存储(6个月)下载
百度BOS云存储提供稳定、安全、高效、高可扩展的云存储服务下载
华为OBS云存储提供海量、安全、高可靠、低成本的数据存储能力下载

温馨提示

从FastAdmin 1.2.0版本开始,所有云存储均已适配分片上传功能
FastAdmin只支持启用一个云存储插件,请勿同时启用多个云存储插件

FastAdmin开发框架的上传功能非常强大,我们只需要简单的配置即可支持单图或多图上传。

上传配置

如果我们未启用云存储插件,此时上传读取的是application/extra/upload.php这个配置文件。

配置名称配置值说明
uploadurlajax/upload一般情况下无需修改
cdnurl一般情况下为空,如果你的应用不限于PC端,可以填写你的网站地址,如https://www.example.com
savekey/uploads/{year}{mon}{day}/{filemd5}{.suffix}配置文件保存的路径
maxsize10mb最大可上传的文件大小,如果启用分片上传,这个值则是限制单一分片的最大值
maxcount0最大可上传的文件数量,仅对多文件上传有效,为0时表示不限制
mimetypejpg,png,bmp,jpeg,gif,zip,rar,xls,xlsx允许上传的后缀列表,支持Mimetype,如jpg,png,image/bmp,application/zip
timeout30000默认上传超时时长为30000,表示30秒
multiplefalse是否默认启用多文件上传,默认关闭,一般在HTML中配置data-multiple="true"
chunkingfalse是否允许使用分片上传,默认关闭,如需启用需配合HTML中的配置,参考下方的分片上传
chunksize2097152分片的大小,默认为2MB,建议整数
fullmodefalse是否启用完整URL路路径模式,默认关闭,只支持FastAdmin1.3.3+

温馨提示

如果安装了云存储插件并启用,则相关配置请在后台插件管理,对应的云存储配置中进行设置。
如果安装了云存储插件并启用,则所有的文件都将上传至云存储,如果需要上传到本地服务器,请给按钮添加data-url="ajax/upload"属性
不支持同时启用多个云存储插件,只允许启用一个云存储插件

文件名规则

文件保存文件名savekey支持替换的变量如下:

变量描述示例
{year}获取当前上传的年份,以上传获取配置的时间为基准2024
{mon}获取当前上传的月份,以上传获取配置的时间为基准10
{day}获取当前上传的日期,以上传获取配置的时间为基准08
{hour}获取当前上传的小时,以上传获取配置的时间为基准12
{min}获取当前上传的分钟,以上传获取配置的时间为基准43
{sec}获取当前上传的秒,以上传获取配置的时间为基准36
{random}16位随机数38dj38h92jf0sjf5
{random32}32位随机数jf0sjf0sjf538dj38h92jf538dj38h92
{filename}文件名abcd.jpg (FastAdmin 1.3.0+支持) 文件名含后缀
{suffix}文件后缀名,如果上传文件无后缀则为filejpg
{.suffix}.的文件后缀名,如果上传文件无后缀则为.file.jpg
{filemd5}上传文件的MD5值,上传超大文件时可能导致前端MD5计算耗时过长sjf538dj0f53h9238h92jjf08dj38sjf

温馨提示

如在savekey中使用了{filemd5},上传超大文件时可能导致前端MD5计算耗时过长

上传示例

<div class="form-group">
    <label for="c-avatar" class="control-label col-xs-12 col-sm-2">头像:</label>
    <div class="col-xs-12 col-sm-8">
        <div class="input-group">
            <input id="c-avatar" data-rule="" class="form-control" size="50" name="row[avatar]" type="text" value="{$row.avatar}">
            <div class="input-group-addon no-border no-padding">
                <span><button type="button" id="faupload-avatar" class="btn btn-danger faupload" data-input-id="c-avatar" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-avatar"><i class="fa fa-upload"></i> 上传</button></span>
                <span><button type="button" id="fachoose-avatar" class="btn btn-primary fachoose" data-input-id="c-avatar" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> 选择</button></span>
            </div>
            <span class="msg-box n-right" for="c-avatar"></span>
        </div>
        <ul class="row list-inline faupload-preview" id="p-avatar"></ul>
    </div>
</div>

我们可以看到这里配置了一个文本框、一个上传按钮、一个选择按钮和一个预览的DIV

类型说明
文本框主要用于接收上传后返回的图片链接,文本框id属性是必选的,这里的idc-avatar
上传按钮主要用于点击后上传文件,有几个属性非常重要,请参考下方的上传按钮属性介绍
选择按钮主要用于点击后选择已经上传的文件,有几个属性非常重要,请参考下方的选择按钮属性介绍
预览区域主要用于预览上传或选择文件后的预览。id属性是必选的,这里的idp-avatar

按钮属性

上传按钮支持属性

属性示例值说明
data-urlajax/upload用于配置上传文件接收的地址,当配置为ajax/upload表示启用本地上传
data-multipart{"key1":"value1"}用于上传时附加额外的参数信息
data-input-idc-avatar用于填充返回URL地址的设文本框
data-mimetypeimage/gif,image/jpeg,image/png,image/jpg,image/bmp用于过滤允许上传的文件类型,支持mimetype或文件后缀名
data-multiplefalse是否支持多图或多文件模式
data-preview-idp-avatar用于预览返回URL地址的DIV
data-maxsize10M用于限制最大可上传的文件大小
data-maxcount1用于限制最大可上传的文件数量
data-timeout60000用于设定上传超时时长,60000表示60秒,默认为30000,表示30
data-chunkingtrue是否启用分片上传,1.2.0版本新增
data-chunk-size2097152分片单片文件大小,1.2.0版本新增
data-resize-quality0.8默认不压缩,只有当设置resizeWidthresizeHeight时才压缩,设置上传图片的压缩品质,1.2.0版本新增
data-resize-width1024默认为null不剪裁,上传前剪裁图片宽度,1.2.0版本新增
data-resize-height768默认为null不剪裁,上传前剪裁图片高度,1.2.0版本新增

选择按钮支持属性

属性示例值说明
data-input-idc-avatar用于填充返回URL地址的设文本框
data-mimetypeimage/gif,image/jpeg,image/png,image/jpg,image/bmp用于过滤允许上传的文件类型,支持mimetype或文件后缀名
data-multiplefalse是否支持多图或多文件模式
data-preview-idp-avatar用于预览返回URL地址的DIV

上传按钮事件

属性示例值说明
data-upload-successfunction上传成功后会进行回调,需使用$("按钮").data("upload-success", function(data, ret, up, file){});赋值
data-upload-errorfunction上传失败后会进行回调,需使用$("按钮").data("upload-error", function(data, ret, up, file){});赋值
data-totaluploadprogressfunction上传进度的回调,需使用$("按钮").data("totaluploadprogress", function(progress, bytesSent){});赋值

直接上传

如果我们想直接通过JS上传一个文件到我们的服务器(支持云存储插件),我们可以使用

Upload.api.send(file, function(data, ret, up, file){
    // 上传成功的回调
}, function(data, ret, up, file){
    // 上传失败的回调
});

来上传文件。

分片上传

从FastAdmin 1.2.0版本开始已经支持分片上传,如果需要启用分片上传,必须客户端和服务端同时开启。首先找到application/extra/upload.php,修改其中的chunking值为true
其次给按钮添加data-chunking=true属性即可,如果提示文件过大,可以再添加data-maxsize="1024M"来控制允许上传的文件大小。

温馨提示

1、因为FastAdmin 框架不支持断点续传,如果采用分片上传大文件时,如果受网络波动影响,有其中一片上传错误,会导致整个文件上传失败,建议使用第三方工具进行上传超大文件。
2、分片上传不支持富文本编辑器内的上传。

上传成功后归类

从FastAdmin 1.2.1版本开始已经支持上传成功后归类功能,我们可以通过给上传按钮添加data-params='{"category":"category2"}'来实现,这个即是上传归类到category2,这个category2可以在常规管理->系统配置->字典配置中添加修改

自定义上传预览

FastAdmin中的上传组件,默认只支持预览图片预览,当判断到不是图片时会使用对应的文件后缀进行预览,如果需要使用自定义上传预览,可以参考以下方法进行实现。
首先请参考上方的上传示例代码,我们给预览区域<ul class="row list-inline faupload-preview" id="p-avatar"></ul>添加一个data-template的属性

<ul class="row list-inline faupload-preview" id="p-avatar" data-template="avatartpl"></ul>

然后在页面底部添加一个avatartpl的自定义模板,如:

<script type="text/html" id="avatartpl">
    <li class="col-xs-3">
        <a href="<%=fullurl%>" data-url="<%=url%>" target="_blank" class="thumbnail">
            <img src="<%=fullurl%>" class="img-responsive">
        </a>
        <a href="javascript:;" class="btn btn-danger btn-xs btn-trash"><i class="fa fa-trash"></i></a>
    </li>
</script>

这其中的data-template的值对应我们自定义模板ID的值,自定义模板中支持的变量如下:

变量名描述
fullurl完整的资源路径
url相对的资源路径,当启用fullmode时为完整的资源路径
index多个资源时,当前资源所在位置的索引

大文件上传

当我们在大文件上传时,除了可以采用上方的分片上传以外,还可以通过修改服务器的配置来实现大文件上传。大文件上传时通常涉及到插件配置/本地配置/PHP配置/Nginx配置四处地方需要修改。
1、如果有安装云存储插件,首先请在后台插件管理修改云存储插件->配置中的最大可上传配置值。
2、然后修改 application/extra/upload.php 里的 maxsize的值。
3、接着修改PHP上传限制,修改你服务器运行环境的 php.ini 里的 max_execution_time=300upload_max_filesize=100Mpost_max_size=100M三个配置值。
4、如果使用Nginx 还需要修改Nginx的配置client_max_body_size 100M;
5、修改配置后务必重启Web服务和清浏览器缓存。

宝塔面板修改请参考:https://ask.fastadmin.net/question/30109.html

自定义上传

请参考文档:https://doc.fastadmin.net/doc/frontend.html#toc-6

温馨提示

1、如果是动态生成的上传按钮,需要使用Form.events.faupload(表单);绑定事件
2、即使设置了分片上传,也只有当上传的文件超过设置的单一分片文件大小时才会启用分片上传。
3、从1.2.0开始,前端上传默认超时为30秒,如上传大文件,请给上传按钮添加data-timeout="600000"设定为10分钟超时。
4、如果安装了云存储插件,上传没有生效,请尝试清空浏览器缓存。
5、如果遇到上传大文件失败,请参考https://ask.fastadmin.net/question/26919.html 进行修改服务器的限制。
6、如果安装了云存储插件并启用,则所有的文件都将上传至云存储,如果仍需要上传文件到本地服务器,请给按钮添加data-url="ajax/upload"属性
7、由于FastAdmin中多图(多文件)使用,作为分隔符处理,因此不支持单个文件(图片)URL中使用,,这种情况常见于云存储图片自定义处理,建议云存储图片处理时采用自定义样式来避免使用到,的情况。

文档最后更新时间:2024-09-19 14:31:57
著作权归应用插件开发者所有,未经许可,禁止转载、复制此文档的任何内容。