使用RestTemplate上传文件

简介: 写作目的最近维护一个项目,里面用了RestTemplate进行服务之前的调用,不过最近有一个Excel解析的需求,百度了几篇,内容不是很全,所以写篇博客记录一下,不过我还是推荐使用Feign调用,毕竟面向接口编程,方便。

代码


亲测可用


@RestController
public class DataExcelImportController {
    private static final String REST_URL_PRFIX = "http://abc";
    @Autowired
    private RestTemplate restTemplate;
    @PostMapping("/importExcel")
    public Object explainExcel(Integer stationId, @RequestPart("file") MultipartFile file) throws Exception {
        if (file.isEmpty()) {
            return "文件为空";
        }
        FdcpResult result = null;
        File file1 = null;
        try {
            //转换为file
            file1 = multipartFileToFile(file);
            FileSystemResource resource = new FileSystemResource(file1);
            MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
            //参数
            param.add("file", resource);
            param.add("stationId", stationId);
            HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(param);
            ResponseEntity<FdcpResult> responseEntity = restTemplate.exchange(REST_URL_PRFIX + "/importExcel", HttpMethod.POST, httpEntity, FdcpResult.class);
            result = responseEntity.getBody();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != file) {
                //最后要删除
                file1.delete();
            }
        }
        return result;
    }
    public static File multipartFileToFile(MultipartFile file) throws Exception {
        File toFile = null;
        if (file.equals("") || file.getSize() <= 0) {
            file = null;
        } else {
            InputStream ins = null;
            ins = file.getInputStream();
            toFile = new File(file.getOriginalFilename());
            inputStreamToFile(ins, toFile);
            ins.close();
        }
        return toFile;
    }
    //获取流文件
    private static void inputStreamToFile(InputStream ins, File file) {
        try {
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
目录
相关文章
|
Java Spring
RestTemplate上传文件解决方案
当对接文件上传模块时,需要对接上传文件的接口,而我们模块的数据是以字节数组存在的(已经操作过了的字节数组,存在于内存中)接口是以form-data的形式上传的,其中需要上传MultipartFIle,如果使用MultipartFile放入到请求的 fromMap中,然后再上传这个文件,会报(ByteArrayInputStream no serialized)的错误,也就是没有注入对应的bean的错误。。
3962 0
|
12月前
|
XML JSON Java
RestTemplate使用详解
RestTemplate使用详解
|
XML JSON Java
超详细RestTemplate,小唐看后怒赞
超详细RestTemplate,小唐看后怒赞
137 0
|
JSON Java Apache
RestTemplate的超全讲解(全)
目录前言1. 简介2. http状态码3. get请求4. post请求5. Exchange 前言 主要介绍RestTemplate的原理以及使用等 1. 简介 常见的http客户端请求工具: jdk HttpURLConnection Apache HttpClient 比较常用 OkHttp 比较常用 RestTemplate是一个同步的web http客户端请求模板工具 是基于spring框架的底层的一个知识点 具体常用的方法如官网所示 RestTemplate官方文档 部分常用方法截图如下:
403 0
RestTemplate的超全讲解(全)
|
JSON 前端开发 Java
|
JSON 缓存 前端开发
如何正确使用RestTemplate【六】
上篇文章,我们学习了HEAD请求的相关方法的使用方法,以及具体参数的不同,当然还有一些代码示例、使用场景等,今天我们来学习POST请求的使用方法。
169 0
如何正确使用RestTemplate【八】
我们学习了Put请求的相关方法的使用方法,以及具体参数的不同,当然还有一些代码示例等等。今天我们来学习PATCH请求的使用方法,PATCH请求与PUT请求可是存在着不解之缘的。
190 0
|
JSON 数据格式
如何正确使用RestTemplate【五】
今天我们来学习HEAD请求的使用方法,搞清headForHeaders方法的使用场景。
349 0
如何正确使用RestTemplate【九】
我们学习了PATCH请求的相关方法的使用方法,以及具体参数的不同,当然还有一些代码示例等。今天我们来学习DELETE请求的使用方法,来共同学习一下吧。
178 0