说明

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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐