您的位置:首页 > 编程语言 > Java开发

前台传入base64图片,java后台转为MultipartFile文件

2018-03-20 11:44 323 查看
       前几天给app写接口,其中一个接口需要上传图片,以前的接口都是上传的file类型,后台可以直接使用MultipartFile来接收这个文件。这次app的开发说不行不行就不行,必须要上传base64格式,我就在网上找了一下,发现都比较麻烦,最后还是在英文网站上找到了一个比较好的处理方法,程序员还是有必要学学英语的,是个叫Rob Black的哥们写的,也是个秃顶,哎。下面是后端的实现代码。MultipartFile是spring框架中的接口,主要的实现类都不太适用于base64的上传文件,这里需要自己写一个实现类。代码如下:public class BASE64DecodedMultipartFile implements MultipartFile {private final byte[] imgContent;private final String header;public BASE64DecodedMultipartFile(byte[] imgContent, String header) {this.imgContent = imgContent;this.header = header.split(";")[0];}@Overridepublic String getName() {// TODO - implementation depends on your requirementsreturn System.currentTimeMillis() + Math.random() + "." + header.split("/")[1];}@Overridepublic String getOriginalFilename() {// TODO - implementation depends on your requirementsreturn System.currentTimeMillis() + (int)Math.random() * 10000 + "." + header.split("/")[1];}@Overridepublic String getContentType() {// TODO - implementation depends on your requirementsreturn header.split(":")[1];}@Overridepublic boolean isEmpty() {return imgContent == null || imgContent.length == 0;}@Overridepublic long getSize() {return imgContent.length;}@Overridepublic byte[] getBytes() throws IOException {return imgContent;}@Overridepublic InputStream getInputStream() throws IOException {return new ByteArrayInputStream(imgContent);}@Overridepublic void transferTo(File dest) throws IOException, IllegalStateException {new FileOutputStream(dest).write(imgContent);}}
然后再写个工具类:public static MultipartFile base64ToMultipart(String base64) {try {String[] baseStrs = base64.split(",");BASE64Decoder decoder = new BASE64Decoder();byte[] b = new byte[0];b = decoder.decodeBuffer(baseStrs[1]);for(int i = 0; i < b.length; ++i) {if (b[i] < 0) {b[i] += 256;}}return new BASE64DecodedMultipartFile(b, baseStrs[0]);} catch (IOException e) {e.printStackTrace();return null;}}然后在代码中调用工具类就可以啦
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: