// 单个文件 上传文件到本地目录里
// 调用方法 utils.UplaodFileToLocal(c)
// author haima
func UplaodFileToLocal(c *gin.Context) (err error,path string){
// 单个文件
file, err := c.FormFile("file")
if err != nil {
err = errors.New(fmt.Sprintf("获取数据失败,%v", err))
return
}
//获取文件后缀
extstring := Ext(file.Filename)
if extstring == ""{
err = errors.New("上传失败,文件类型不支持,只能上传 xlsx 格式的。")
return
}
extStrSlice := []string{".xlsx"}
if !ContainArray(extstring, extStrSlice) {
//fmt.Println("上传失败,文件类型不支持,只能上传 xlsx 格式的。")
err = errors.New("上传失败,文件类型不支持,只能上传 xlsx 格式的。")
return
} //filepath := 'resource/public/uploads/'
filepath := global.GVA_CONFIG.Uploads.FilePath //从配置文件里取
//如果没有filepath文件目录就创建一个
if _, err := os.Stat(filepath); err != nil {
if !os.IsExist(err) {
os.MkdirAll(filepath, os.ModePerm)
}
}
//上传到的路径
//path := 'resource/public/uploads/20060102150405test.xlsx'
file.Filename = fmt.Sprintf("%s%s", time.Now().Format("20060102150405"), file.Filename) // 文件名格式 自己可以改 建议保证唯一性
path = filepath + file.Filename //路径+文件名上传 // 上传文件到指定的目录
err = c.SaveUploadedFile(file, path)
if err != nil {
err = errors.New(fmt.Sprintf("上传失败,%v", err))
return
}
return
} //Contain 判断obj是否在target中,target支持的类型array,slice,map false:不在 true:在
func ContainArray(obj interface{}, target interface{}) bool {
targetValue := reflect.ValueOf(target)
switch reflect.TypeOf(target).Kind() {
case reflect.Slice, reflect.Array:
for i := 0; i < targetValue.Len(); i++ {
if targetValue.Index(i).Interface() == obj {
return true
}
}
case reflect.Map:
if targetValue.MapIndex(reflect.ValueOf(obj)).IsValid() {
return true
}
} return false
} //获取文件的扩展名
func Ext(path string) string {
for i := len(path) - 1; i >= 0 && path[i] != '/'; i-- {
if path[i] == '.' {
return path[i:]
}
}
return ""
}

gin 单个文件函数 上传文件到本地目录里的更多相关文章

  1. 小程序云开发--云函数上传文件或图片 base64

    云函数开发遇到的问题 在微信云开发环境当中,普通的用户并没有往云存储内写入文件的权限 所以普通用户想要使用wx.cloud.uploadFile显然是不现实的 但是我们同时也知道,云函数是后台服务端, ...

  2. ssh 下载文件以及上传文件到服务器

    https://blog.csdn.net/jackghq/article/details/64124062 scp john@192.168.1.100:~/Desktop/MHN_error_so ...

  3. 异步上传文件,ajax上传文件,jQuery插件之ajaxFileUpload

    http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html 一.ajaxFileUpload是一个异步上传文件的jQuery插件. ...

  4. models渲染字典&form表单上传文件&ajax上传文件

    {# {% for u in teacher_d.keys %}#} {# {% for u in teacher_d.values %}#} {% for k,u in teacher_d.item ...

  5. asp.net (web)选择文件夹 上传文件

    1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...

  6. Java创建文件夹、创建文件、上传文件,下载文件

    1.创建文件夹 /** * 判断文件夹是否存在 * @param myPath */ public static void judeDirExists(File myPath) { if (!myPa ...

  7. C# HTTP系列11 以普通文件流方式上传文件远程服务器

    系列目录     [已更新最新开发文章,点击查看详细] 应用程序中上传附件是最常使用的操作之一,ASP.NET客户端一般通过上传控件实现, <input type="file" ...

  8. fromdata上传文件,ajax上传文件, 纯js上传文件,html5文件异步上传

    前端代码: 上传附件(如支付凭证等) <input type="file" name="fileUpload" id="fileUpload&q ...

  9. nodeJs学习-11 multer中间件,解析post文件,上传文件

    const express=require('express'); const bodyParser=require('body-parser'); const multer=require('mul ...

  10. cURL 学习笔记与总结(4)使用 cURL 从 ftp 上下载文件与上传文件到 ftp

    下载: <?php $curlobj = curl_init(); curl_setopt($curlobj, CURLOPT_URL, "ftp://192.***.*.***/文件 ...

随机推荐

  1. KingbaseES 实现 MYSQL 的 delete limit 写法

    使用MySQL的用户可能会比较熟悉这样的用法,更新或删除时可以指定限制更新或删除多少条记录. update tl set xxx=xxx where xxx limit 10; delete from ...

  2. OpenHarmony设备环境查询:Environment

      开发者如果需要应用程序运行的设备的环境参数,以此来作出不同的场景判断,比如多语言,暗黑模式等,需要用到Environment设备环境查询. Environment是ArkUI框架在应用程序启动时创 ...

  3. OpenHarmony装饰指定自定义组件:@BuilderParam装饰器

      当开发者创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作.若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能.为解决此问题,ArkUI ...

  4. OpenHarmony社区运营报告(2023年2月)

      本月快讯 • 2023年2月25日,以"技术构筑万物智联"为主题的第一届开放原子开源基金会OpenAtom OpenHarmony(以下简称"OpenHarmony& ...

  5. OpenHarmony中的HDF单链表及其迭代器

    概念 为了性能考虑,嵌入式系统一般使用C语言进行开发,由于C语言标准库没有封装链表,所以嵌入式系统一般自己设计和实现链表这种数据结构.单链表是链表中的一种,本文描述OpenAtom OpenHarmo ...

  6. C# 窗口停靠隐藏类

    引用:https://www.cnblogs.com/lidj/archive/2012/07/06/2579923.html 最近修改了一下.可以更方便的用在各个窗体上了 代码也简洁很多.直接引用一 ...

  7. C#中yield return的作用

    C#中yield return的作用 yield return作用在 return 时,保存当前函数的状态,下次调用时继续从当前位置处理.示例说明如下代码所示,主函数使用 foreach 输出 Get ...

  8. openGauss资源池化开发者入门指南(二)

    openGauss 资源池化开发者入门指南(二) 一.内容简介 openGauss 资源池化是 openGauss 推出的一种新型的集群架构.通过 DMS 和 DSS 组件,实现集群中多个节点的底层存 ...

  9. 安装pnpm 和报错解决,亲测可行

    安装pnpm 和报错解决,亲测可行 pnpm 是一款磁盘空间高效的软件包管理器. 当使用 npm 或 Yarn 时,如果你有 1000个项目,并且所有项目都有一个相同的依赖包,那么, 你在硬盘上就需要 ...

  10. ContOS7搭建RAID-5磁盘阵列

    RAID5:分布式奇偶校验的独立磁盘结构 RAID5就是raid0和RAID1的一种折中,既提升了磁盘读写能力,又有一定的容错能力,成本也低: 实验开始: 1.挂载四块5G硬盘 2.进行分区:fdis ...