zoukankan      html  css  js  c++  java
  • gin 单个文件函数 上传文件到本地目录里

    // 单个文件 上传文件到本地目录里
    // 调用方法 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 ""
    }
    
  • 相关阅读:
    Unique path
    *Jump Game
    Valid Palindrome
    *Reverse Words in a String
    Min Stack
    [?]*Simplify Path
    *Valid Parentheses
    *Sqrt(x)
    String to Integer (atoi)
    Add Digits
  • 原文地址:https://www.cnblogs.com/haima/p/13152882.html
Copyright © 2011-2022 走看看