Gin上传文件到MongoDB gridfs

上传图片

func imagePost(c *gin.Context) {
	image, err := c.FormFile("file")
	if err != nil {
		errMsg := err.Error()
		logger.Error(errMsg)
		autorestapi.RespErr(c, errMsg)
		return
	}
	fileImage, err := image.Open()
	if err != nil {
		errMsg := err.Error()
		logger.Error(errMsg)
		autorestapi.RespErr(c, errMsg)
		return
	}
	defer fileImage.Close()
	imageGridFS, err := model.GetGridFS("image")
	if err != nil {
		errMsg := err.Error()
		logger.Error(errMsg)
		autorestapi.RespErr(c, errMsg)
		return
	}
	now := self_time.GetNowTimeStamp()
	nowStr := strconv.FormatInt(now, 10)
	file, err := imageGridFS.Create(nowStr)
	if err != nil {
		errMsg := err.Error()
		logger.Error(errMsg)
		autorestapi.RespErr(c, errMsg)
		return
	}
	file.SetName(nowStr)
	_, err = io.Copy(file, fileImage)
	if err != nil {
		errMsg := err.Error()
		logger.Error(errMsg)
		autorestapi.RespErr(c, errMsg)
		return
	}

	err = file.Close()
	if err != nil {
		errMsg := err.Error()
		logger.Error(errMsg)
		autorestapi.RespErr(c, errMsg)
		return
	}

	autorestapi.RespData(c, nowStr)
}

下载图片

func imageGet(c *gin.Context) {
	imagename := c.Param("imagename")
	imageGridFS, err := model.GetGridFS("image")
	if err != nil {
		errMsg := err.Error()
		logger.Error(errMsg)
		autorestapi.RespErr(c, errMsg)
		return
	}
	file, err := imageGridFS.Open(imagename)
	if err != nil {
		errMsg := err.Error()
		logger.Error(errMsg)
		autorestapi.RespErr(c, errMsg)
		return
	}
	size := file.Size()
	io.Copy(c.Writer, file)
	err = file.Close()
	if err != nil {
		errMsg := err.Error()
		logger.Error(errMsg)
		autorestapi.RespErr(c, errMsg)
		return
	}
	c.Writer.WriteHeader(http.StatusOK)
	c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=%s", imagename))
	c.Header("Content-Type", "application/text/plain")
	c.Header("Accept-Length", fmt.Sprintf("%d", size))
}
posted @ 2019-06-11 12:49  darylc  阅读(670)  评论(0编辑  收藏  举报