问题描述
例如,我正在尝试上传名称为“test-äöü.txt” 的文件,并且它像“ test-???。txt” 一样出现在jira上
这是我的原始代码:
RestTemplate restTemplate = restTemplateFactory.getInstance(RestTemplateUtil.getRequestFactory(proxyInfo,useEncryption));
File file = new File(filepath,filename);
MultiValueMap<String,Object> multipartMap = new LinkedMultiValueMap<>();
FileSystemResource var = new FileSystemResource(file);
multipartMap.add("file",var);
httpentity<MultiValueMap<String,Object>> request = new httpentity<MultiValueMap<String,Object>>(multipartMap,RestTemplateUtil.buildHttpHeadersForUploadAttachment(jiraUser,jiraPass,useEncryption)
ResponseEntity<String> result = restTemplate.exchange( jiraAdressAttachFile,HttpMethod.POST,request,String.class);
我正在buildHttpHeadersForUploadAttachment
方法和“内容类型” 中设置“授权” ,“ X-Atlassian-Token” 标头,值为MediaType.MULTIPART_FORM_DATA
就像我说过的那样,文件以名称为“ test-???。txt” 的形式保存在jira上,然后我搜索了一些解决方案并尝试了这些解决方案,但对我没有任何帮助。 这是我尝试解决问题的解决方案:
restTemplate.getMessageConverters().stream()
.filter(FormHttpMessageConverter.class::isinstance)
.map(FormHttpMessageConverter.class::cast)
.findFirst()
.orElseThrow(() -> new IllegalStateException("Failed to find FormHttpMessageConverter"))
.setMultipartCharset(StandardCharsets.UTF_8);
没用
restTemplate.getMessageConverters().stream()
.filter(AllEncompassingFormHttpMessageConverter.class::isinstance)
.map(AllEncompassingFormHttpMessageConverter.class::cast)
.findFirst()
.orElseThrow(() -> new IllegalStateException("Failed to find AllEncompassingFormHttpMessageConverter"))
.setMultipartCharset(StandardCharsets.UTF_8);
没用
restTemplate.getMessageConverters().add(0,new FormHttpMessageConverter() {
@Override
protected String getFilename(Object part) {
if (part instanceof Resource) {
Resource resource = (Resource) part;
try {
return new String(resource.getFilename().getBytes(StandardCharsets.UTF_8));
} catch (UnsupportedEncodingException e) {
e.printstacktrace();
return null;
}
} else {
return null;
}
}
});
在此示例中,我尝试了StandardCharsets
的所有可能值,但仍然无效
我也尝试过这个
FormHttpMessageConverter converter = new FormHttpMessageConverter();
converter.setMultipartCharset(Charset.forName("UTF-8"));
restTemplate.getMessageConverters().add(0,converter);
还有这个
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
StringHttpMessageConverter stringMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
ByteArrayHttpMessageConverter byteArrayHttpMessageConverter = new ByteArrayHttpMessageConverter();
byteArrayHttpMessageConverter.setDefaultCharset(Charset.forName("UTF-8"));
ResourceHttpMessageConverter resourceHttpMessageConverter = new ResourceHttpMessageConverter();
resourceHttpMessageConverter.setDefaultCharset(Charset.forName("UTF-8"));
FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
formHttpMessageConverter.setMultipartCharset(Charset.forName("UTF-8"));
AllEncompassingFormHttpMessageConverter allEncompassingConverter = new AllEncompassingFormHttpMessageConverter();
allEncompassingConverter.setCharset(Charset.forName("UTF-8"));
allEncompassingConverter.setMultipartCharset(Charset.forName("UTF-8"));
allEncompassingConverter.setPartConverters(Arrays.asList(stringMessageConverter,byteArrayHttpMessageConverter,resourceHttpMessageConverter));
for (Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator(); iterator.hasNext(); ) {
HttpMessageConverter conv = iterator.next();
if (conv instanceof AllEncompassingFormHttpMessageConverter) {
iterator.remove();
}
}
messageConverters.add(allEncompassingConverter);
restTemplate.setMessageConverters(messageConverters);
再次出现不良结果。
我在原始代码或尝试并描述的可能解决方案中做错了吗? 还是有我没有尝试过的东西,我必须做才能正确地运行我的代码?
在发布请求之前,在File
,FileSystemResource
和MultiValueMap<String,Object>
对象中,此文件具有正确的名称,例如“test-äöü.txt”
更新: 问题是春季启动版本低于2.0
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)