In der Anwendung, die ich entwickle, möchten wir, dass der Client Daten im JSON-Format sendet, deshalb entwickle ich eine RESTful-API. Ein Teil der Anwendung erfordert, dass der Client eine Datei (normalerweise ein Bild) zusammen mit Informationen über das Bild hochlädt.
Ich habe Probleme, herauszufinden, wie ich dies in einer einzigen Anfrage erreichen kann. Ist es möglich, Dateidaten mit Base64 in einen JSON-String zu kodieren? Muss ich zwei POST-Anfragen an den Server stellen? Sollte ich dafür nicht JSON verwenden?
Außerdem verwenden wir Grails im Backend, und auf diese Dienste kann über native mobile Clients (iPhone, Android usw.) zugegriffen werden, wenn diese Informationen abweichen.
您可以使用multipart/form-data内容类型在一个请求中发送文件和数据:
来自http://www.faqs.org/rfcs/rfc2388.html:
您可以在每个边界之间的每个部分中包含文件信息或字段信息。我已经成功地实现了一个需要用户提交数据和表单的RESTful服务,multipart/form-data完美地工作。该服务使用Java/Spring构建,客户端使用C#,所以很遗憾我没有Grails的示例可以提供给您关于如何设置服务。在这种情况下,您不需要使用JSON,因为每个“form-data”部分都为您提供了指定参数名称及其值的位置。
使用multipart/form-data的好处是您正在使用HTTP定义的头部,因此您遵循了使用现有HTTP工具创建服务的REST理念。
我在这里问了一个类似的问题:
如何使用REST Web服务上传带有元数据的文件?
你基本上有三种选择:
multipart/form-data
的形式发送文件,并将ID返回给客户端。然后客户端使用该ID发送元数据,服务器重新关联文件和元数据。