我可以在http请求的表单数据中有一个正文和一个文件吗



我在Go Lang REST API回购中工作。

我想构建一个端点,它将接收一个文件(作为表单数据的一部分,所以我想我将使用request.FormFile('my-file-key')(。这个端点还应该接受一个JSON模型的主体(我想它会用这样的东西解码:

var myData model.MyModel
json.NewDecoder(request.Body).Decode(&myData)

但我遇到了很多问题。是否可以通过http请求同时发送表单数据中的正文和文件?

如果我尝试发送两者,我会从FormFile收到错误,说它找不到密钥名称的文件(但如果我发送完全相同的请求而没有正文,则不会发生此错误(。我猜它在解码请求时遇到了问题。

您需要的是一个多部分请求。一部分可以是JSON数据,另一部分是文件数据。

如果使用Go客户端准备请求,则需要使用mime/multipart包创建Writer,然后使用CreatePart创建JSON部分,然后创建文件部分,并将请求提交给服务器。

在解码方面:由于正文是JSON,因此无法将其解析为表单。解析标头后,必须使用multipart.Reader从正文中读取。同样,从该读取器中获得Part,并从该部分读取数据。您将得到两个部分,一个用于JSON数据,另一个用于文件数据。

相关内容

最新更新