Gin集成GoFly开发系统框架聚合本地存储、腾讯云cos、阿里云oss、七牛云等多种文件存储使用说明
GoFly框架实现了多存储方式集成,支持本地、腾讯云COS、阿里云OSS、七牛云等多种存储方案的灵活切换和统一管理。开发者可通过简单配置选择存储方式,上传文件时直接调用UploadFile方法即可获取访问URL。框架提供后端方法(GetFullUrl等)处理文件路径补全,前端也可通过工具函数GetFullPath动态拼接完整访问地址。从v3.0.1版本开始需注意部分插件的路径兼容性问题,开发者可参
说明
GoFly框架根据实际项目需求把多种文件存储方式集成在一起,方便多种存储方式切换、多种文件存储一同使用、统一配置。实际开发中在不同阶段可选择不同文件存储,且切换不同存储位置,之前上传其他存储位置的可正常显示(不影响使用)。
目前框架为大家集成了常用几种存储方式:本地存储、腾讯云cos、阿里云oss、七牛云。如此以上几种不是你想要的,打击可以在此基础上集成自己存储云(如:华为云),仿照现有的代码扩展即可。
文件处理功能代码放在:utils\extend\uploads目录中,开发时可以去看看源码。
注意:多种文件存储集成在一起,在v3.0.1版开始,部分插件可能文件路径不兼容,如果安装插件文件无法打开,请参考本文档替换。
使用
1.选择存储方式和配置参数

2.文件上传
引入插件,代码如下:
import (
"gofly/utils/extend/uploads"
)
上传方法,UploadFile传上传参数是文件流信息,直接把客户端提交file数据直接传给UploadFile即可,返回数据url是文件访问路径、cover_url是缩略图(预留,需要在实现)、err是错误信息,代码如下
url, cover_url, err := uploads.New().UploadFile(file)
实例代码:
// 上传文件总接口
func (api *Upfile) Upload(c *gf.GinCtx) {
file, err := c.FormFile("file")
if err != nil {
gf.Failed().SetMsg("获取数据失败,").SetData(err).Regin(c)
return
}
//处理文件上传,bin返回地址
url, cover_url, err := uploads.New().UploadFile(c, file)
if err != nil {
gf.Failed().SetMsg("上传文件失败").SetData(err).Regin(c)
return
}
//处理预览url地址
vurl: = gf.GetFullUrl(url)
gf.Success().SetMsg("文件上传成功").SetData(vurl).Regin(c)
}
}
3.后端代码调用
3.1获取附件访问的完整地址,传入路径返回完整,可更加文件路径判断文件类型(本地存储、腾讯云、阿里云等)
//处理预览url地址
fileData["url"] = gf.GetFullUrl(url)
3.2获取当前设置上传方式的附件访问域名,如当前是本地(local)则返回本地访问地址
RootUrl = gf.GetRootUrl()
3.3获取所有上传方式附件访问的地址域名
RootUrl = gf.GetAllRootUrl()
4.前端代码调用
前端访问文件(图片)时由于数据库保存文件路径时通常都是不含域名的(路径不完整,方便项目迁移换域名等),所以在访问文件时需要加上域名或者ip地址补全请求路径。补全方法:1.后端补全(通过 gf.GetFullUrl(url)方法)数据在后端处理好在返回完整路径,2.在前端补全,通过后端gf.GetRootUrl()和gf.GetAllRootUrl()获取存储方式访问域名,再前端补全文件访问路径。
js/ts实例utils/tool工具代码:
//获取附件完整访问路径
export function GetFullPath(url:any):string{
if(!url){
return ""
}else if(isAllUrl(url)){
return url
}else{
var imgname = url.split('/');//分割url
imgname = imgname[imgname.length-1];//通过最后一个数组下标获取图片名
const userStore = useUserStore()
if(imgname.startsWith("local")){
url= userStore.rooturls?.local+url
}else if(imgname.startsWith("alioss")){
url= userStore.rooturls?.alioss+url
}else if(imgname.startsWith("tencentcos")){
url= userStore.rooturls?.tencentcos+url
}else if(imgname.startsWith("qiniuoss")){
url= userStore.rooturls?.qiniuoss+url
}else{//如果地址前缀无法判断文件存储位置,则使用设置上传方式的访问地址
url=userStore.defrooturl+url
}
return url
}
}
其中:defrooturl是通过gf.GetRootUrl()函数获取,rooturls是通过gf.GetAllRootUrl()函数获取。
业务调用:
<template>
<img :src="GetFullPath(userStore.avatar)" alt="avatar" />
</template>
<script setup lang="ts">
import { GetFullPath } from "@/utils/tool";
</script>
框架预览
预览地址:https://spl.goflys.cn/webbusiness/
账号:gofly
密码:gofly123
更多推荐
所有评论(0)