- 本文地址: https://www.yangdx.com/2022/10/224.html
- 转载请注明出处
接上一篇,已知 DcatAdmin 配置了七牛云存储后,可以不改动原来的表单代码,就能将资源上传到七牛云存储空间,如:
$form->image('img_url')
->uniqueName()
->autoUpload()
->saveFullUrl()
->autoSave(false)
->removable(false);
这样使用,图片上传的时候,是先经过我们的服务器,然后再由服务器上传到七牛云,相当于做了一次中转。
图片文件一般都比较小,前端页面上传操作感觉不出有什么变化。但如果是一些大文件,比如视频文件,几十MB甚至几百MB,前端操作上传的时候,就会明显看到进度条到100%后仍要等待一段时间,最后才显示完成,体验非常不好!
前端文件直传七牛云,论坛上已经有人发布了修改方法:https://learnku.com/articles/66288
但是,该方法需要提前命名好文件,如果是多文件上传呢?
于是,经过本人改良,可以使用七牛云的魔法变量自动命名文件,代码如下:
// 文件保存路径(使用魔法变量)
$saveKey = 'video/$(etag)$(ext)';
$disk = Storage::disk(config('admin.upload.disk'));
$policy = [
'saveKey' => $saveKey,
// 返回 Dcat 上传文件需要的报文格式
'returnBody' => json_encode([
'status' => true,
'data' => [
'id' => $disk->url($saveKey), //不想要完整 url 的话改成 $saveKey 即可
],
]),
];
// 七牛云上传 token
$token = $disk->getAdapter()->uploadToken(null, 3600, $policy);
$form->multipleFile('video_url')
->autoUpload()
->autoSave(false)
->removable(false)
->maxSize(1024 * 500) // 最大500M
->accept('mp4,mov,m4v,3gp,avi,m3u8,webm')
->options([
'fileVal' => 'file', // Dcat 默认为 _file_
'server' => 'https://up-z1.qiniup.com', // 上传地址
'formData' => [
'token' => $token, // 添加 token
],
]);
这里使用了2个魔法变量 etag 和 ext,能够保证文件名称唯一,关于魔法变量的说明,见文档:https://developer.qiniu.com/kodo/1235/vars
上传地址 server,需要根据实际的存储区域来填写,见文档:https://developer.qiniu.com/kodo/1671/region-endpoint-fq
快来评论一下吧!
发表评论