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)然後上傳文件的方式跟上傳普通文件一樣,也就是通過輸入流來上傳到服務器。詳細的有時間再貼出代碼!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章