远程资源文件转储

主要思路就是获取链接资源,获得输入流然后转字节,字节再转MultipartFile对象, 看到最后步骤的MultipartFile对象是不是就很熟悉了呢?
注意:适用spring框架,因为使用MultipartFile的前提是使用了sprin框架


   private MultipartFile getFile(String pdfUrl, String fileName) throws IOException {
        URL url = new URL(pdfUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        //设置超时间为3秒
        conn.setConnectTimeout(3 * 1000);
        //防止屏蔽程序抓取而返回403错误
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        //得到输入流
        InputStream inputStream = conn.getInputStream();
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
        byte[] buff = new byte[100];
        int rc = 0;
        while ((rc = inputStream.read(buff, 0, 100)) > 0) {
            swapStream.write(buff, 0, rc);
        }
        byte[] in2b = swapStream.toByteArray();
        return new BytesToMultipartFile(in2b, "file", fileName, MediaType.MULTIPART_FORM_DATA);
    }

字节转MultipartFile核心代码

package com.dindo.invoice.util;

import com.dindo.core.tool.utils.Func;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * 字节转MultipartFile
 * @author Fan HaoJie
 */
@Slf4j
public class BytesToMultipartFile implements MultipartFile {

    private final byte[] bytes;

    private final String name;

    private final String originalFilename;

    private final String contentType;

    public BytesToMultipartFile(byte[] bytes, String name, String originalFilename, MediaType contentType) {
        this.bytes = bytes;
        this.name = name;
        this.originalFilename = originalFilename;
        this.contentType = contentType.getType();
    }

    @Override
    public String getName() {
        return name;
    }

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

    @Override
    public String getContentType() {
        return contentType;
    }

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

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

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

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

    @Override
    public void transferTo(File dest) {
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(dest);
            fileOutputStream.write(bytes);
            fileOutputStream.flush();
        } catch (IOException e) {
            log.info(e.getLocalizedMessage(), e);
        } finally {
            if (fileOutputStream != null) {
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    log.info(e.getLocalizedMessage(), e);
                }
            }
        }
    }

    /**
     * byte数组转 MultipartFile
     *
     * @param bytes            byte数组
     * @param name             文件名称,也就是文件key
     * @param originalFilename 文件原始名称
     * @param contentType      文件类型   具体请查此表 https://tool.oschina.net/commons
     * @return
     */
    public static MultipartFile bytesToMultipartFile(byte[] bytes, String name, String originalFilename, MediaType contentType) {
        if (bytes == null || bytes.length == 0 || Func.isAnyBlank(name, originalFilename)) {
            return null;
        }
        return new BytesToMultipartFile(bytes, name, originalFilename, contentType);
    }

}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇