RestTemplate多文件上传问题

 

我的博客原文地址:https://www.sunnymaple.cn/2019/06/28/RestTemplate%E5%A4%9A%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E9%97%AE%E9%A2%98/

文件服务器(使用Mongodb作为文件存储数据库),在该应用中,我是通过MultipartFile数组接收多个文件,然后存储到Mongodb数据库中:代码如下:

@PostMapping(value = "/uploads")
public String upload(String detail, String groupId, @RequestParam("files") MultipartFile[] files) throws Exception{
    if (SeageUtils.isEmpty(groupId)){
      groupId = SeageUtils.getUUID();
    }
    fileGroupService.upload(detail, groupId, files);
    return groupId;
}

那么在其他应用中,使用RestTemplate将前端(安卓或者iOS等客户端)传递过来的参数传到文件服务器,代码如下:

@PostMapping("/clientFilesUploads")
public String clientFilesUploads(String detail,@RequestParam("files") MultipartFile[] files) throws Exception{
    MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
    List<Object> fileList = new ArrayList<>();
    for(MultipartFile file : files) {
        ByteArrayResource byteArrayResource = new ByteArrayResource(file.getBytes());
        fileList.add(byteArrayResource);
    }
    //使用files上传文件
    map.put("files", fileList);
    map.add("detail",detail);
    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
    HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map, httpHeaders);
    String url = "http://localhost:8081/group/uploads";
    ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, request, String.class);
    System.out.println(response.getBody());
    return "上传成功!";
}

 但是意外的是,在文件服务器接收文件的接口中,并没有获取到任何文件,files的size为0.

这时,我们需要对ByteArrayResource 对象重写getFilename()方法问题才得以解决,将上面代码中的第六行代码: 

 

ByteArrayResource byteArrayResource = new ByteArrayResource(file.getBytes());

修改为:

ByteArrayResource byteArrayResource = new ByteArrayResource(file.getBytes()){
    @Override
    public String getFilename() throws IllegalStateException {
        return file.getOriginalFilename();
    }
};

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值