搜索

首页  >  问答  >  正文

以JSON格式发布文件和相关数据到RESTful WebService

<p>在我正在开发的应用程序中,我们希望客户端以JSON格式发送数据,因此我正在开发RESTful API。该应用程序的一部分要求客户端上传一个文件(通常是图像),以及有关图像的信息。</p> <p>我很难追踪到如何在单个请求中完成这个操作。是否可以将文件数据Base64编码为JSON字符串?我需要向服务器执行两个POST请求吗?我是否不应该使用JSON来处理这个问题?</p> <p>另外,我们在后端使用Grails,并且这些服务可由原生移动客户端(iPhone、Android等)访问,如果这些信息有所不同的话。</p>
P粉056618053P粉056618053465 天前591

全部回复(2)我来回复

  • P粉994092873

    P粉9940928732023-08-21 12:54:55

    您可以使用 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理念。

    回复
    0
  • P粉145543872

    P粉1455438722023-08-21 11:24:16

    我在这里问了一个类似的问题:

    如何使用REST Web服务上传带有元数据的文件?

    你基本上有三种选择:

    1. 对文件进行Base64编码,但会增加数据大小约33%,并在服务器和客户端中增加编码/解码的处理开销。
    2. 首先以multipart/form-data的形式发送文件,并将ID返回给客户端。然后客户端使用该ID发送元数据,服务器重新关联文件和元数据。
    3. 首先发送元数据,并将ID返回给客户端。然后客户端使用该ID发送文件,服务器重新关联文件和元数据。

    回复
    0
  • 取消回复