最近开发一个golang为开发后端接口语言的CMS,将几个标准件拆分出来分享下
图片上传代码:
/// 上传图片
func (Systemconfig)  SaveUploadedFile(c *gin.Context ) {
 
	headers ,err := c.FormFile("file")
	fmt.Println(err)
	if err != nil{
		fmt.Println(err)
	}
 
 
	dst :=headers.Filename
 
	fmt.Println(dst)
	if err := c.SaveUploadedFile(headers,dst) ; err != nil{
		fmt.Println(err)
	}
 
 
}
记得引入gin框架,不然会报错;
代码写好后总是有点需求:现在上传的是上传到web root文件夹,图片多了就有点难看了吧,一般标配都是到upload之类的文件夹:
/// 上传图片
func (Systemconfig)  SaveUploadedFile(c *gin.Context ) {
 
	headers ,err := c.FormFile("file")
	fmt.Println(err)
	if err != nil{
		fmt.Println(err)
	}
 
 
	//dst :=headers.Filename
	dst := path.Join("./upload", headers.Filename)   /// 添加到upload文件夹,这里没有验证和自动生成文件夹,所以需要手动创建文件夹,不然会报错
	fmt.Println(dst)
	if err := c.SaveUploadedFile(headers,dst) ; err != nil{
		fmt.Println(err)
	}
 
 
}
图片传好了,但是现在先改下文件名,上传的时候名叫 640.webp的文件想做的高端点变成:bc43a99a0f77c93ae7223c6a293f5b2c.webp这样的格式,就是时间戳加上一个随机数生成一个厉害的名字:
最终我的代码长这样:
/// 上传图片
func (Systemconfig)  SaveUploadedFile(c *gin.Context ) {
 
	headers ,err := c.FormFile("file")
	fmt.Println(err)
	if err != nil{
		fmt.Println(err)
	}
	crutime := time.Now().Unix() + rand.Int63n(10)
	h := md5.New()
	io.WriteString(h, strconv.FormatInt(crutime , 10))
	token := fmt.Sprintf("%x", h.Sum(nil))
 
	//dst :=headers.Filename
	dst := path.Join("./upload", headers.Filename)
 
	fmt.Println(dst)
	if err := c.SaveUploadedFile(headers,dst) ; err != nil{
		fmt.Println(err)
	}
 
	fmt.Println("fullFilename =", headers.Filename)
	var filenameWithSuffix string
	filenameWithSuffix = path.Base(headers.Filename)
	fmt.Println("filenameWithSuffix =", filenameWithSuffix)
	var fileSuffix string
	fileSuffix = path.Ext(filenameWithSuffix)
	fmt.Println("fileSuffix =", fileSuffix)
 
	var filenameOnly string
	filenameOnly = strings.TrimSuffix(filenameWithSuffix, fileSuffix)
	fmt.Println("filenameOnly =", filenameOnly)
	newdst :=path.Join("./upload" , token+""+fileSuffix)
 
	os.Rename(dst , newdst)
 
 
}
 
  