agp*_*gpt 8 java jax-rs spring-mvc jersey
我已经创建了一个平针织的restful web服务,我设法使用方法签名上传多个文件@Context HttpServletRequest request,这很好地工作.
事实上,要获取其他表单字段,我需要重复检查带有.isFormField();相对.getName();文件的方法.getFieldName();,以及每次调用Web服务时.getString();检查是否存在必需字段的方法,如果有的话,我认为这个过程很费时其他几个领域.
更容易的方法是使用@FormDataParamwebservice用于暴露客户端需要通过的参数的地方,但问题是我无法一次上传多个文件.
因为request.getParameter("field1");如果媒体类型或enctype是,它也不可能用于获取其他表单字段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
}
Run Code Online (Sandbox Code Playgroud)
我的表格:

输出:(解析请求后)
field1> abc
field2> xyz
Chrysanthemum.jpg尺寸:879394
Desert.jpg尺寸:845941
Hydrangeas.jpg尺寸:595284
Jellyfish.jpg尺寸:775702
Mar*_*ski 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>
Run Code Online (Sandbox Code Playgroud)
您可以使用:
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Path("/multipleFiles")
public String restDemo(@FormDataParam("zfile") List<FormDataBodyPart> zfile)
Run Code Online (Sandbox Code Playgroud)
现在,我建议不要使用HttpServletRequest.如果您需要处理所有内容,请使用以下命令:
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Path("/multipleFiles")
public String restDemo(FormDataMultiPart formParams) {
formParams.getFields();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10100 次 |
| 最近记录: |