Sube:
// @Summary上传文件 // @description // @Tags archivo // / form-data @Accept multiparte // "archivo" archivo @Param archivo FormData cierto // @Produce JSON // @Success 200 {objeto} filtros. respuesta { "código": 200, "datos": nil, "msg": ""} // @Router / carga [mensaje] func UploadFile (CTX * gin.Context) { archivo, encabezado, err: = ctx.Request .FormFile ( " archivo " ) si se equivocan! = nil { returnMsg (CTX, configs.ERROR_PARAMS, "" , se equivocan. Error ()) de retorno } // 获取文件名 nombre: = header.Filename // 写入文件 a cabo , se equivocan: = os.Create ( " ./static/ " + nombre de fichero) si ! Err = nil { returnMsg (CTX, configs.ERROR_SERVERE, "" , err.Error ()) de retorno } Defer cabo .Close () _, err = io.Copy ( cabo , archivo) si se equivocan! = nil { log.Fatal (err) } returnMsg (CTX, 200 , "" , " éxito" ) }
Descargar:
// @Summary下载文件 // @description // @Tags archivo // @Param nombre de cadena de consulta verdadero "nombre de archivo" // @Success 200 {objeto} gin.Context // @Router / descarga [conseguir] func DownloadFile ( ctx * gin.Context) { nombre del archivo: = ctx.DefaultQuery ( " nombre de archivo " , "" ) // fmt.Sprintf ( "unión; nombre de archivo =% s", nombre de archivo)对下载的文件重命名 ctx.Writer.Header ( ) .Add ( " Content-Disposition " , fmt.Sprintf ( " unión; nombre de archivo =% s " , nombre de archivo)) ctx.Writer.Header (). Añadir (" Content-Type " , " application / octet-stream " ) ctx.File ( " ./static/a.txt " ) }
Leer la carga de archivos CSV y descarga, etc .: https://blog.csdn.net/aaaadong/article/details/90177038