记录一次通过resttemplate进行文件上传请求转发的处理

需要将文件上传接口的请求通过resttemplate转发到另一个后台接口上,采用resttemplate进行post 请求获取。

  文件上传接口 
@PostMapping("/xxxx/fileUpload")
String fileUpload(@RequestParam(value = "files") MultipartFile[] multipartFiles)

两种方式 一种是上传文件先本地临时存储,

 HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.MULTIPART_FORM_DATA); // 多部件表单体
            MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();
            multipartBodyBuilder.part("type", type);
            for (MultipartFile multipartFile :files
             ) {
                String path = "G:\\tmp_pic" + File.separator + multipartFile.getOriginalFilename();
                File file = FileUtils.multiPartFileToFile(path, multipartFile);
                FileSystemResource fileSystemResource = new FileSystemResource(file);
                multipartBodyBuilder.part("files", fileSystemResource);
            }
   
            MultiValueMap<String, HttpEntity<?>> multipartBody = multipartBodyBuilder.build();
            HttpEntity datas = new HttpEntity<>(multipartBody, headers);
            ResponseEntity<String> responseEntity = restTemplate.postForEntity(basePath+"/xxxx/fileUpload", datas, String.class);
            return responseEntity.getBody();
 public class FileUtils {
 	public static File multiPartFileToFile(String path, MultipartFile multiFile) throws IOException {
        File file=new File(path);
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        file.createNewFile();
        multiFile.transferTo(file);
        return file;
    }

二是通过将MultipartFile 转化ByteArrayResource

 HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.MULTIPART_FORM_DATA); // 多部件表单体
            MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();
            multipartBodyBuilder.part("type", type);
            for(MultipartFile file : files) {
                ByteArrayResource resource = new ByteArrayResource(file.getBytes()) {
                    @Override
                    public String getFilename() {
                        return file.getOriginalFilename();
                    }
                };
                multipartBodyBuilder.part("files", resource);
            }

            MultiValueMap<String, HttpEntity<?>> multipartBody = multipartBodyBuilder.build();
            HttpEntity datas = new HttpEntity<>(multipartBody, headers);
            ResponseEntity<String> responseEntity = restTemplate.postForEntity(basePath+"/xxxx/fileUpload", datas, String.class);
            return responseEntity.getBody();

关于文件下载采用已知可访问url的方式实现

    @PostMapping("/xxx/downLoadRemateFile")
    public void downLoadRemateFile(String url, HttpServletResponse response) {
        //当传入的url返回不为空的时候,读取数据
        URLConnection connection = null;
        InputStream input;
        try{
            String ContentType=null;
            //设置请求的头信息
            URL urlInfo = new URL(url);
            connection = urlInfo.openConnection();
            //设置头信息
            connection.addRequestProperty("Host", urlInfo.getHost());
            connection.addRequestProperty("Connection", "keep-alive");
            //强制要求缓存服务器在返回缓存的版本之前将请求提交到源头服务器进行验证。
            connection.addRequestProperty("Cache-Control", "no-cache");
            //使用url的Host来标记来源
            connection.addRequestProperty("Referer", "http://"+urlInfo.getHost());
            //表示用户不愿意目标站点追踪用户个人信息。
            connection.addRequestProperty("DNT", "1");
            //强制要求缓存服务器在返回缓存的版本之前将请求提交到源头服务器进行验证。
            connection.addRequestProperty("Pragma", "no-cache");
            connection.addRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
            connection.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36");
            connection.connect();
            //获取请求回来的信息
            input = connection.getInputStream();
            BufferedInputStream bufferedInputStream = new BufferedInputStream(input);
            byte[] buf = new byte[1024];
            int length = bufferedInputStream.read(buf);
            ServletOutputStream out = response.getOutputStream();
            while (-1 != length) {
                System.out.println(length);
                out.write(buf, 0,length);
                length = bufferedInputStream.read(buf);
            }
            out.flush();
            out.close();
            bufferedInputStream.close();
        }catch(Exception e){
            e.printStackTrace();
        }finally {

        }

    }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值