zoukankan      html  css  js  c++  java
  • 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))
    }
    
  • 相关阅读:
    tornado源码分析-多进程
    create a cocos2d-x-3.0 project in Xcode
    记录自己的傻逼的错误:找不到或无法载入主类
    MVC5 Entity Framework学习之实现主要的CRUD功能
    Linux中实现多网卡绑定总结
    it码农之心灵鸡汤(一)
    【高级算法】遗传算法解决3SAT问题(C++实现)
    MySQL-分区表-1
    OpenSift源代码编译过程记录
    Android Studio 视图解析
  • 原文地址:https://www.cnblogs.com/daryl-blog/p/11002995.html
Copyright © 2011-2022 走看看