使用RestEasy和Wildfly 11的MultipartFormDataInput中的文件名编码错误
除非文件名包含特殊字符,否则我的upload rest方法可以正常工作:使用RestEasy和Wildfly 11的MultipartFormDataInput中的文件名编码错误,rest,encoding,wildfly,resteasy,Rest,Encoding,Wildfly,Resteasy,除非文件名包含特殊字符,否则我的upload rest方法可以正常工作: @POST @Consumes({ MediaType.MULTIPART_FORM_DATA }) public Response uploadFile(MultipartFormDataInput input) { Map<String, List<InputPart>> uploadForm = input.getFormDataMap(); List<InputPart
@POST
@Consumes({ MediaType.MULTIPART_FORM_DATA })
public Response uploadFile(MultipartFormDataInput input) {
Map<String, List<InputPart>> uploadForm = input.getFormDataMap();
List<InputPart> inputParts = uploadForm.get("file_upload");
// Do Stuff...
}
@POST
@使用({MediaType.MULTIPART\u FORM\u DATA})
公共响应上载文件(MultipartFormDataInput){
Map uploadForm=input.getFormDataMap();
List inputParts=uploadForm.get(“文件上传”);
//做些事情。。。
}
文件名为Test.png,inputPart.getHeaders()=[Content Disposition=form data;name=“tws\u file”;filename=“Test.png”,Content Type=image/png]
-->正常
文件名为Döner.png,inputPart.getHeaders()=[Content Disposition=form data;name=“tws_file”;filename=“D��ner.png“,内容类型=图像/png]
-->不正常
如你所见,“ö”变成了“��".强>
到目前为止我已经尝试过的事情:
- 将我的jboss_web.xml中的默认编码设置为
(参见)UTF-8
- 将我的@Consumes注释更改为
(请参阅)@Consumes(MediaType.MULTIPART\u FORM\u DATA+“charset=UTF-8”);
- 使用
更改容器请求筛选器中的编码requestContext.setProperty(InputPart.DEFAULT\u CHARSET\u PROPERTY,“UTF-8”);
似乎什么都不管用。有什么想法吗?我正在使用Wildfly 11和Resteasy multipart provider 3.0.24。最终,我使用了一种变通方法,即在发送文件之前手动使用URI编码器对文件名进行编码。另一方面,我对其进行解码。这样,特殊字符就不再是问题了 前端角度:
encodeURI(fileName));
Java后端:
URLDecoder.decode(fileName, "UTF-8");
最后,我使用了一种变通方法,在发送文件之前用URI编码器对文件名进行手动编码。另一方面,我对其进行解码。这样,特殊字符就不再是问题了 前端角度:
encodeURI(fileName));
Java后端:
URLDecoder.decode(fileName, "UTF-8");
添加一个
javax.ws.rs.container.ContainerRequestFilter
为我解决了这个问题(Wildfly 11.0.0,提供了Resteasy):
@Provider
公共类CharsetRequestFilter实现ContainerRequestFilter{
@凌驾
公共无效筛选器(ContainerRequestContext requestContext)引发IOException{
requestContext.setProperty(InputPart.DEFAULT_CHARSET_属性,“UTF-8”);
}
}
添加一个javax.ws.rs.container.ContainerRequestFilter
为我解决了这个问题(Wildfly 11.0.0,提供了Resteasy):
@Provider
公共类CharsetRequestFilter实现ContainerRequestFilter{
@凌驾
公共无效筛选器(ContainerRequestContext requestContext)引发IOException{
requestContext.setProperty(InputPart.DEFAULT_CHARSET_属性,“UTF-8”);
}
}
该问题已在最新版本中修复:该问题已在最新版本中修复:不适用于Wildfly 15.0.0,提供的Resteasy不适用于Wildfly 15.0.0,提供的Resteasy工作正常,升级jboss不是我的选择…工作正常,升级jboss不是我的选择。。。