我创建了一个平针织的restful web服务,我托管,使用@Context HttpServletRequest request
作为方法签名上传多个文件,效果很好。
事实是,要获取其他表单字段,我需要使用.isFormField();
方法重复检查文件或.getName();
的相对.getFieldName();
和.getString();
方法以检查是否存在必填字段或者不是每次调用Web服务时,如果有其他几个字段,我认为这个过程很费时费用。
更简单的方法是使用@FormDataParam
,其中webservice用于暴露客户端需要通过的参数,但问题是我无法一次上传多个文件。
如果媒体类型或enctype为request.getParameter("field1");
,也无法使用multipart/form-data
来获取其他表单字段。
每当我尝试将@FormDataParam
和@Context HttpServletRequest request
组合在一起时,它会抛出异常:
org.apache.tomcat.util.http.fileupload.FileUploadException: Stream closed
使用.parseRequest(request);
类的ServletFileUpload
方法解析请求时。
请建议一些好的方法我如何才能实现多个文件上传,并且需要获得所需的表单字段,就像在球衣中@FormDataParam
一样简单。
方法:
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Path("/multipleFiles")
public String restDemo(@Context HttpServletRequest request)
{
//...code goes here
}
我的表单:
输出:(解析请求后)
field1> ABC
field2> XYZ
Chrysanthemum.jpg尺寸:879394
Desert.jpg尺寸:845941
Hydrangeas.jpg尺寸:595284
Jellyfish.jpg 大小:775702
答案 0 :(得分:16)
如果字段名称相同,则为:
<form name="formtest" action="rest/multipleFiles" method="POST" enctype="multipart/form-data">
<input type="text" name="atext" value="abc" />
<input type="text" name="btext" value="123" />
<input type="file" name="zfile" value="" />
<input type="file" name="zfile" value="" />
<input type="submit" value="submit" />
</form>
您可以使用:
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Path("/multipleFiles")
public String restDemo(@FormDataParam("zfile") List<FormDataBodyPart> zfile)
现在,我建议不要使用HttpServletRequest。如果您需要处理所有内容,请使用:
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Path("/multipleFiles")
public String restDemo(FormDataMultiPart formParams) {
formParams.getFields();
}