V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ne6rd
V2EX  ›  问与答

使用 Spring 的 RestTemplate 在后台模拟 post 请求上传文件,文件名乱码

  •  
  •   ne6rd · 2016-02-24 18:38:51 +08:00 · 12313 次点击
    这是一个创建于 3199 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RestTemplate restTemplate = new RestTemplate();
            HttpHeaders headers = new HttpHeaders();
            headers.add("Authorization", addToken);
            MediaType type = MediaType.parseMediaType("multipart/form-data;charset=UTF-8");
            headers.setContentType(type);
    
            MultiValueMap<String, Object> form = new LinkedMultiValueMap<String, Object>();
            FileSystemResource fileSystemResource = new FileSystemResource("c:\\测试.txt");
            form.add("parent_dir", uploadPath);
            form.add("file", fileSystemResource);
    
            HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(form, headers);
            ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
    

    Alt text

    Content-Disposition 我查了下好像只支持 ISO8859-1 编码,
    尝试用这种方法手动转换过去也不行。

    HttpHeaders headers2 = new HttpHeaders();
    String cd = "form-data; name=\"file\"; filename=\"" + "测试" + "\"";
    String cdEncode = new String(cd.getBytes("utf-8"), "iso8859-1");
    headers2.add("Content-Disposition", cdEncode);
    HttpEntity<FileSystemResource> fileSystemResourceHttpEntity = new HttpEntity<FileSystemResource>(fileSystemResource, headers2);
    form.add("file", fileSystemResourceHttpEntity);

    请问 java 后台上传文件应该怎么处理中文文件名?谢谢

    1 条回复    2017-05-31 18:26:12 +08:00
    arvintian
        1
    arvintian  
       2017-05-31 18:26:12 +08:00
    解决了吗?怎么解决的,分享一下,谢谢~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1116 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:13 · PVG 03:13 · LAX 11:13 · JFK 14:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.