springmvc 上传文件时,文件名名称乱码?

老君20111 发布于 2018/05/30 14:25
阅读 2K+
收藏 0

    使用testtemplate调用spring mvc接口上传文件时,文件名称为中文,    我使用了LinkedMultiValueMap作为上传的参数。然而在springmvc接收参数时,name = multipartFile.getOriginalFilename(),name时乱码的,但文件其他一切正常。

    目前我确定两端的编码格式都是utf-8,所以不知道是哪里处理问题?现请教大家?

接口调用:

 File file = new File(filePath);
            LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>() ;
            InputStream is = new FileSystemResource(file).getInputStream();

            map.add("contract", new FileSystemResource(file));

            HttpHeaders headers = new HttpHeaders();
            headers.setContentType( MediaType.parseMediaType("multipart/form-data;charset=UTF-8"));
//            headers.setContentType(MediaType.MULTIPART_FORM_DATA);
            String tempToken = getToken(username, password);
            headers.add(HttpHeaders.AUTHORIZATION, tempToken);

            HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<>(map, headers);

            responseEntity =
                    restTemplate.exchange(uploadAPI, HttpMethod.POST, requestEntity, String.class);

            LOGGER.debug("responseEntity is {}", responseEntity);

 

springmvc端代码:

    @RequestMapping(
            value = "/{ID}/upload-contract",
            method = RequestMethod.POST,
            consumes = {MediaType.MULTIPART_FORM_DATA_VALUE},
            produces = MediaType.APPLICATION_JSON_VALUE)
    public String uploadContract(@PathVariable("ID") String orderId,
                                 @RequestParam("contract") MultipartFile multipartFile
//            , @RequestParam( required = false) String filename
    ) {
        String name = multipartFile.getOriginalFilename();
        ContractList contractList = orderService.uploadContract(multipartFile, orderId);

        ApiResponse apiResponse = new ApiResponse();
        apiResponse.addEntry("result", contractList.getContractList());

        return apiResponse.toJsonStr();
    }

 

加载中
0
客气了_叫我码农就好
客气了_叫我码农就好

如果你前端使用form表单提交的文件,不管你怎么设置编码格式,都无效,因为form表单属性

enctype=“multipart/form-data”意思是不对字符编码,所以你设置的UTF-8无效,中文就会乱码。

如果不是form表单提交的数据,那就不清楚了

老君20111
接口是rest风格的,我是用spring的resttemplate调用。编码在传输之前我加了断点看过的,是没有乱码的。
0
zhen2
zhen2

对我有用

返回顶部
顶部