网关接收multipartFile文件后,转发到后台服务

工作中遇到了一个网关接收multipartFile类型图片,然后转发到后台服务的需求,项目是基于springCloud的分布式框架,要求在网关层接收到服务后,组装相关信息,再转发到后台服务作具体处理,转发方式通过restTemplate调用,代码如下:

网关层接收:

@ApiOperation(value = "图片上报")
@PostMapping(value = "/upload/img/{id}")
@RecordSystemLog
public Object uploadFaceimg(@RequestParam Long time, @RequestParam("faceimg") MultipartFile faceimg, @PathVariable UUID id) throws {
       service.uplod(faceimg, id, time);
       return true;
}

网关service层:

public void upload(MultipartFile imageMulti, UUID id, Long time) {
        //构建请求地址
        String api = getUploadPath();
        api = api + "?id=" + id.toString();
       
        //restTemple不能传输File和MulipartFile,转为FileSystemResource后传输
        //构建FileSystemResource需要文件类型为File,因此先将MulipartFile转为File
        //convertTemporaryPath转换临时地址
        File image = ConvertUtil.multipartFileToFile(imageMulti, convertTemporaryPath);

        try {
            FileSystemResource resource = new FileSystemResource(image);
            MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
            param.add("faceimg", resource);
            param.add("time", time);
            //使用HttpEntity构建需要传递的参数
            HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(param);
			restTemplate.postForEntity(api, httpEntity, CustomerDetectInfo.class).getBody();
        } catch (RestClientException e) {
            e.printStackTrace();
        } finally {
            image.delete();
        }
    }

转换工具:

public static File multipartFileToFile(MultipartFile file, String convertBasePath) {
        if (file != null) {
            File base = new File(convertBasePath);
            if (!base.exists()) {
                base.mkdirs();
            }
            String filePath = convertBasePath + file.getName() + String.valueOf((int) (100000 * Math.random())) + ".jpeg";

            File conventFile = new File(filePath);
            try {
                boolean isCreateSuccess = conventFile.createNewFile();
                if (isCreateSuccess) {
                    file.transferTo(conventFile);
                    return conventFile;
                }
            } catch (IOException e) {
                log.warn("multipartFile convert to File failed  -> " + e.getMessage());
            }
        }
        return null;
    }

后台服务接收代码:

@ApiOperation(value = "图片上传")
        @PostMapping(value = "/upload/{id}")
        @RecordSystemLog
        //传递参数用@RequestParam接收
        public Object search(@RequestParam("faceimg") MultipartFile faceimg, @PathVariable UUID id, @RequestParam("time") String time) {
        //具体业务代码
        }

部分代码有使用到其他作者文章内容,但是忘记链接地址了,抱歉。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值