golang-文件上传-文件下载

upload.go

package common

import (
	"io/ioutil"
	"os"
	"path"

	"github.com/gin-gonic/gin"
	"googo.co/goo"
	"googo.co/utils"
)

const (
	UPLOAD_DIR = "static/"
)

type Upload struct {
}

func (this Upload) DoHandle(c *gin.Context) *goo.Result {
	fh, err := c.FormFile("file")
	if err != nil {
		return goo.Err(700, "上传失败:"+err.Error(), err.Error())
	}

	f, err := fh.Open()
	if err != nil {
		return goo.Err(701, "上传失败:"+err.Error(), err.Error())
	}
	defer f.Close()

	bytes, err := ioutil.ReadAll(f)
	if err != nil {
		return goo.Err(702, "上传失败:"+err.Error(), err.Error())
	}

	md5File := utils.MD5(bytes)
	fpath := md5File[0:2] + "/" + md5File[2:4] + "/"

	if err := os.MkdirAll(UPLOAD_DIR+fpath, 0755); err != nil {
		return goo.Err(703, "上传失败:"+err.Error(), err.Error())
	}

	fname := fpath + md5File[8:24] + path.Ext(fh.Filename)

	fw, err := os.Create(UPLOAD_DIR + fname)
	if err != nil {
		return goo.Err(704, "上传失败:"+err.Error(), err.Error())
	}
	defer fw.Close()

	if _, err := fw.Write(bytes); err != nil {
		return goo.Err(705, "上传失败:"+err.Error(), err.Error())
	}

	return goo.Succ(gin.H{
		"url": "/file/" + fname,
	})
}
// 上传文件
r.POST("/upload", goo.Handler(common.Upload{}))

// 下载文件
r.StaticFS("/file", http.Dir("./static"))

// 访问
http://localhost:18000/file/ab/cd/efghijk.png

 

转载于:https://my.oschina.net/qiongtaoli/blog/3064756

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值