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))
}
上一篇:c++的Hello World(自学C++的第三天)


下一篇:CAN打包解包公用函数