RestTemplate上传图片
来源:互联网 发布:族谱制作软件 编辑:程序博客网 时间:2024/06/12 23:54
今天用RestTemplate上传图片,在这里分享下。
同事定义的接收类型为MultipartFile,这是spring的对文件上传的一个组件。
我现在做的是跟以前的系统对接,图片上传之后使用BASE64处理的,所以我这里是使用BASE64对数据解码,然后处理。先看代码:
Controller的主代码:
public Object upload(String image){// FileSystemResource fileResource = new FileSystemResource(new File("d://image")); BASE64Decoder decoder=new BASE64Decoder();// byte[] rawBytes = utils.File2byte("d://test.png");//将图片转为byte[] byte[] rawBytes=decoder.decodeBuffer(image); String suffix=utils.getSuffix(rawBytes);//获取图片的后缀名,也可以是其他任意文件名 String fileName="myImage"+suffix;// ByteArrayResource fileResource = new ByteArrayResource(rawBytes) { @Override public String getFilename() { return fileName; } }; MultiValueMap<String,Object> postParameters=new LinkedMultiValueMap<String,Object>(); postParameters.add("file",fileResource);// HttpHeaders headers = new HttpHeaders();// headers.setContentType(MediaType.MULTIPART_FORM_DATA);// HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(postParameters, headers); RestTemplate restTemplate=new RestTemplate(); String url=localUri+"/image/upload"; BasicResponse basicResponse=restTemplate.postForObject(url,postParameters,BasicResponse.class); return basicResponse; }
用到的工具类utils :
package com.test;import java.io.*;import java.util.Arrays;/** * Created by pangkunkun on 2017/6/27. */public class utils { public static String getSuffix(byte[] source){ byte[] byteSuffix= Arrays.copyOf(source,3); String hexSuffix=bytesToHexString(byteSuffix); switch (hexSuffix){ case "89504e": return ".png"; case "ffd8ff": return ".jpg"; default: return ".jpg"; } } public static String bytesToHexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder(); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString().toLowerCase(); } public static byte[] File2byte(String filePath) { byte[] buffer = null; try { File file = new File(filePath); FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] b = new byte[1024]; int n; while ((n = fis.read(b)) != -1) { bos.write(b, 0, n); } fis.close(); bos.close(); buffer = bos.toByteArray(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return buffer; }}
因为我们的项目默认只有png和jpg,所以上面获取图片格式(文件后缀名)的方法我只处理了两种格式的,如果有其它的需要,可以上网查下相关格式对应的后缀名添加上去。
特别说下,因为我是用本地图片测的,所以在网上找到两种方法:
FileSystemResource fileResource = new FileSystemResource(new File("d://image"));
和
byte[] rawBytes = utils.File2byte("d://test.png");//将图片转为byte[] // byte[] rawBytes=decoder.decodeBuffer(image); String suffix=utils.getSuffix(rawBytes);//获取图片的后缀名,也可以是其他任意文件名 String fileName="myImage"+suffix;// ByteArrayResource fileResource = new ByteArrayResource(rawBytes) { @Override public String getFilename() { return fileName; } };
第一种不多说了,很简单。
第二种比较复杂,但是比较符合我的需求,而且不需要把文件本地化。
但是这里有个地方需要注意下,使用ByteArrayResource 必须要实现getFilename。
但是上面的方法是针对MultipartFile,如果接收方使用的是File对象,传的时候直接使用一般的文件就行:
File file =new File("d://image");
将file直接作为一个参数传过去就OK。
阅读全文
0 0
- RestTemplate上传图片
- springmvc RestTemplate文件上传
- RestTemplate文件上传
- RestTemplate上传文件总结
- 使用RestTemplate上传文件
- spring RestTemplate上传文件乱码
- 使用RestTemplate如何上传文档
- RestTemplate
- RestTemplate
- restTemplate
- RestTemplate
- RestTemplate
- Spring RestTemplate使用ByteArrayResource上传方式
- Android客户端采用RestTemplate实现附件的上传
- restTemplate上传文件.整个body里面只放文件流
- 图片上传
- 上传图片
- 上传图片
- Java——SVN
- 简单粗暴的理解Promise
- window.name + iframe 实现跨域
- 使用datadapter对象
- xshell换行导致python输入异常
- RestTemplate上传图片
- 方向错了,即使把自己感动到哭,也并没有什么用。
- C#中StringBuilder类的使用总结
- 面试题35—相关题目
- 【LeetCode】617 Merge Two Binary Trees
- MyBatis 不需要log4j就可以打印出SQL语句
- iOS编程学习四
- Deque
- sqlite3初级