使用RestEasy和Wildfly 11的MultipartFormDataInput中的文件名编码错误

使用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

除非文件名包含特殊字符,否则我的upload rest方法可以正常工作

@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不是我的选择。。。