Spring Boot通过Base64上传图片

最近这几天的实习工作,需要基于Spring Boot做上传文件的接口,后来还要做一个基于Base64编码的单独上传图片的接口,图片经过base64编码后如下图。
在这里插入图片描述
接收前台传过来的图片Base64编码和图片文件名后。

我的解决思路:

(1)把Base64编码转化为MultipartFile的形式,这就需要重写MultipartFile的方法了。

重写MultipartFile的方法

/**
 * @author: Stephen
 * @date: 2019/1/9
 * @description: 重写MultipartFile方法
 */
public class Base64MultipartFile implements MultipartFile {
    private final byte[] imgContent;

    private final String header;

    private final String fileName;
    public Base64MultipartFile(byte[] imgContent, String header, String fileName){
        this.imgContent = imgContent;
        this.header = header.split(";")[0];
        this.fileName = fileName;
    }

    @Override
    public String getName() {
        return System.currentTimeMillis() + Math.random() + "." + header.split("/")[1];
    }

    @Override
    public String getOriginalFilename() {
        return fileName;
    }

    @Override
    public String getContentType() {
        return header.split(":")[1];
    }

    @Override
    public boolean isEmpty() {
        return imgContent == null || imgContent.length == 0;
    }

    @Override
    public long getSize() {
        return imgContent.length;
    }

    @Override
    public byte[] getBytes() throws IOException {
        return imgContent;
    }

    @Override
    public InputStream getInputStream() throws IOException {
        return new ByteArrayInputStream(imgContent);
    }

    @Override
    public void transferTo(File dest) throws IOException, IllegalStateException {
        new FileOutputStream(dest).write(imgContent);
    }
}

Base64转化为MultipartFile,后台处理的逻辑

/**
     * Base64转化为MultipartFile
     *
     * @param data 前台传过来base64的编码
     * @param fileName 图片的文件名
     * @return
     */
    @Override
    public MultipartFile base64toMultipart(String data, String fileName) {
        try {
                String[] baseStrs = data.split(",");
                BASE64Decoder decoder = new BASE64Decoder();
                byte[] b = decoder.decodeBuffer(baseStrs[1]);
                for(int i = 0; i < b.length; ++i) {
                    if (b[i] < 0) {
                        b[i] += 256;
                    }
                }
                return new Base64MultipartFile(b, baseStrs[0] , fileName);
        } catch (IOException e) {
            throw new RestException("IO流异常" , e);
        }
    }

(2)然后上传文件的方式跟上传普通文件一样,也就是通过输入流来上传到服务器。详细的有时间再贴出代码!

展开阅读全文

没有更多推荐了,返回首页