我正在创建一个restful web服务,它处理来自用户的多个文件。从google看来,正确的mime类型应该是multipart/mixed,所以我的java web服务代码(基于Jersey)类似于:

@POST
@Consumes(MultiPartMediaTypes.MULTIPART_MIXED)
@Produces({
    MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON
})
@Path("/{Id}")
public CourseBean updateCourse(@PathParam("Id") final String id, final MultiPart multipart)
    throws WebServiceException
{
    //operations on multipart
    String this.id = id;
    return null;
}

在浏览器中,我运行以下html以尝试将文件上载到web服务:
<h1></h1>

<p>files</p>
<FORM action="http://localhost:8080/rest/1"
       enctype="multipart/mixed"
       method="POST">
<p>
   name:<INPUT type="text" name="submit-name"><BR>
   file <INPUT type="file" name="file"><BR>
   attachment <INPUT type="file" name="attachment"><BR>
   <INPUT type="submit" value="Send"> <INPUT type="reset">
 </FORM>

</body>
</html>

请注意这里的enctype是“multipart/mixed”。但是,在选择文件并单击“发送”按钮后,我的web服务获取的http请求的mime类型将更改为application/x-www-form-urlencoded,这将在web服务端导致“不支持的媒体类型”错误。
但如果我将html中的enctype更改为multipart/form数据,则接收到的请求的mime类型是相同的:multipart/form数据。
所以我的问题是,我如何创建一个html表单来发送mime类型为“multipart/mixed”的http消息?有了这个html,我可以测试我的web服务。
非常感谢你。

最佳答案

HTML表单不支持将数据作为multipart/mixed发送。它们最接近,你可能想使用的是multipart/form-data。如果REST webservice只能接受multipart/mixed,则无法从HTML表单直接调用它。
有关详细信息,请参见此问题:What does enctype='multipart/form-data' mean?

关于html - 如何创建一个HTML表单以发送具有multipart/mixed mime类型的http消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16976299/

10-11 01:13