gpt4 book ai didi

java - 在 Jersey 中使用@Context HttpServletRequest 和@FormDataParam 进行多文件上传

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:34:37 24 4
gpt4 key购买 nike

我创建了一个 jersey restful web 服务,我使用 @Context HttpServletRequest 请求 作为方法签名设法上传多个文件工作得很好。
事情是,要获取其他表单字段,我需要重复检查 .isFormField(); 方法和相对 .getName(); 文件或 .getFieldName( );.getString(); 方法来检查必填字段是否存在每次调用 web 服务,我认为这很冗长如果还有其他几个字段,则过程昂贵。

更简单的方法是使用 @FormDataParam,其中 web 服务过去常常使用客户端需要传递的参数公开,但问题是我无法上传多个文件一去。

因为如果媒体类型或编码类型为 multipart/form-data,也无法使用 request.getParameter("field1"); 获取其他表单字段。

每当我尝试将 @FormDataParam@Context HttpServletRequest 请求 组合在一起时,它会抛出异常:
org.apache.tomcat.util.http.fileupload.FileUploadException:流关闭
在使用 .parseRequest(request); ServletFileUpload 类的方法解析 request 时。

请提出一些好的方法如何通过获取所需的表单字段来实现多个文件上传,就像在 Jersey 中的 @FormDataParam 一样简单。

多文件上传方法:

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Path("/multipleFiles")
public String restDemo(@Context HttpServletRequest request)
{
//...code goes here
}

我的表单:

enter image description here

输出:(解析请求后)

field1 > abc
field2 > xyz
Chrysanthemum.jpg Size: 879394
Desert.jpg Size: 845941
Hydrangeas.jpg Size: 595284
Jellyfish.jpg Size: 775702

最佳答案

如果字段有相同的名称,像这样:

<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();
}

关于java - 在 Jersey 中使用@Context HttpServletRequest 和@FormDataParam 进行多文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17174485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com