使用requets传输文件并携带自定义参数, 使用gin接收

,

Python

try:
	file_obj = open("C:/temp/1.txt", "rb")
	file_arg = {'file': ("1.txt", file_obj, {'path': 'test'})}
	try:
		response = requests.post(url, headers=header, files=file_arg)
	except Exception as e:
		print("传输文件失败:", e)
	finally:
		file_obj.close()
except Exception as e:
	print("打开文件失败:", e)

Go

func (a *App) PostFile(c *gin.Context) {
	var (
		path string
		err  error
	)

	file, err := c.FormFile("file")
	if err != nil {
		app.NewResponse(c).ToErrorResponse(code.InvalidParams)
		return
	}
	path = file.Header.Get(code.ContentType)
	if path == "" {
		app.NewResponse(c).ToErrorResponse(code.InvalidParams)
		return
	}
	postFilePathObj := PostFile{}
	//修改传过来参数的'为", 然后转换为json, 拿到客户端想上传的目录
	if err = json.Unmarshal([]byte(strings.ReplaceAll(path, "'", `"`)), &postFilePathObj); err != nil {
		app.NewResponse(c).ToErrorResponse(code.InvalidParams)
		return
	}
	//开始判断路径是否存在
	fullPath := filepath.Join(global.RootPath, postFilePathObj.Path)
	pathInfo, err := os.Stat(fullPath)
	if err != nil {
		app.NewResponse(c).ToErrorResponse(code.NotFound)
		return
	}
	//是否为目录
	if !pathInfo.IsDir() {
		app.NewResponse(c).ToErrorResponse(code.InvalidParams)
		return
	}
	//验证通过
	fullPath = filepath.Join(fullPath, file.Filename)

	//保存文件
	global.Logger.Info(logContent)
	if err = c.SaveUploadedFile(file, fullPath); err != nil {
		global.Logger.Errorf(saveFileLog, fullPath, err)
		app.NewResponse(c).ToErrorResponse(code.ServerError)
		return
	}

	app.NewResponse(c).ToResponse(code.Success)
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注