验证文件大小,在线解析文件下载地址转base64,base64转文件工具类

场景:

1.做一个在线pdf验真,基本流程就是在上传的时候限制文件上传大小,然后上传成功以后拿到fileKey之后能够拿到这个文件的下载地址。根据下载地址拿到这个文件,通过在线地址解析成base64。

2.验证pdf是否加密?如果加密输入密码

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>

<dependencies>

    <!--pdf验证加密-->
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf</artifactId>
        <version>3.4.2</version>
    </dependency>
@PostMapping(value = "/checkPdfIsEncryption")
@ApiOperation(value = "检验pdf是否加密", notes = "检验pdf是否加密")
public BaseResponse checkFileType(@RequestParam("file") MultipartFile multipartFile) {
    // 创建PdfDocument实例
    PdfDocument doc = new PdfDocument();
    // 加载PDF文件
    try {
        doc.loadFromBytes(multipartFile.getBytes());
    } catch (Exception e) {
        throw new SuperRuntimeException(ErrorCodeEnum.FILE_ENCRYPTION);
    }
    return BaseResponse.ok();
}

public class FileUtils {

    /**
     * @param :multipartFile:上传的文件
     * @param size:                限制大小
     * @param unit:限制单位(B,K,M,G)
     * @return boolean:是否大于
     * @author 
     * @dateTime 2020-10-21 14:42:17
     * <p>
     * 判断文件大小
     */
    public static boolean checkFileSize(MultipartFile multipartFile, int size, String unit) {
        long len = multipartFile.getSize(); // 上传文件的大小, 单位为字节.
        // 准备接收换算后文件大小的容器
        double fileSize = 0;
        if ("B".equals(unit.toUpperCase())) {
            fileSize = (double) len;
        } else if ("K".equals(unit.toUpperCase())) {
            fileSize = (double) len / 1024;
        } else if ("M".equals(unit.toUpperCase())) {
            fileSize = (double) len / 1048576;
        } else if ("G".equals(unit.toUpperCase())) {
            fileSize = (double) len / 1073741824;
        }
        // 如果上传文件大于限定的容量
        if (fileSize > size) {
            return false;
        }
        return true;
    }

    /**
     * @param url 文件在线下载地址
     * @return
     * @author 
     * @dateTime 2020-10-21
     * <p>
     * 将在线连接转换为Base64编码方法
     */
    public static String downloadImg(String url) {
        try {
            //System.out.print("开始下载" + url + "资源\n");
            URL uploadUrl = new URL(url);
            HttpURLConnection httpUrl = (HttpURLConnection) uploadUrl.openConnection();
            httpUrl.connect();
            httpUrl.getInputStream();
            InputStream is = httpUrl.getInputStream();
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            // 创建一个Buffer字符串
            byte[] buffer = new byte[1024];
            // 每次读取的字符串长度,如果为-1,代表全部读取完毕
            int len = 0;
            while ((len = is.read(buffer)) != -1) {
                outStream.write(buffer, 0, len);
            }
            // 对字节数组Base64编码
            BASE64Encoder decoder = new BASE64Encoder();
            return decoder.encode(outStream.toByteArray());
        } catch (Exception ex) {
            //System.out.print("文件下载出错:" + ex.getMessage() + "\n");
            throw new SystemException(ErrorCodeEnum.GET_FILE_DOWNLOAD_URL_FAIL);
        }
    }

    /**
     * @param base64Str  base64字符串
     * @param fileName   文件名称
     * @param parentPath 图片存放路径
     * @return
     * @author 
     * @dateTime 2020-10-21
     * <p>
     * base64字符串转换成图片
     */
    public static File base64StrToFile(String base64Str, String fileName, String parentPath) {
        File file = new File(parentPath, fileName);
        FileOutputStream out = null;
        try {
            //byte[] bytes = Base64Utils.decodeFromString(base64Str);
            byte[] bytes1 = new BASE64Decoder().decodeBuffer(base64Str);
            ByteArrayInputStream in = new ByteArrayInputStream(bytes1);
            byte[] buffer = new byte[1024];
            out = new FileOutputStream(file);
            int byteSum = 0;
            int byteRead = 0;
            while ((byteRead = in.read(buffer)) != -1) {
                byteSum += byteRead;
                out.write(buffer, 0, byteRead);
            }
        } catch (Exception ex) {
            throw new RuntimeException("transform base64 String into file 出错", ex);
        } finally {
            try {
                if (null != out) {
                    out.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return file;
    }
/**
 * 根据在线url,获取文件名称
 *
 * @param urlStr
 * @return
 */
public String getFileName(String urlStr) {
    String fileName = null;
    try {
        URL url = new URL(urlStr);
        URLConnection uc = url.openConnection();
        fileName = uc.getHeaderField("Content-Disposition");
        fileName = new String(fileName.getBytes("ISO-8859-1"), "GBK");
        fileName = URLDecoder.decode(fileName.substring(fileName.indexOf("filename=") + 10), "UTF-8");
        //log.info("文件名为:" + fileName + "  大小" + (uc.getContentLength()/1024)+"KB")

    } catch (Exception e) {
        e.printStackTrace();
    }
    return fileName;
}

 /**
 * 截取字符串
 *
 * @param str   待截取的字符串
 * @param start 截取起始位置 ( 1 表示第一位 -1表示倒数第1位)
 * @param end   截取结束位置 (如上index)
 * @return
 */
 public static String sub(String str, int start, int end) {
    String result = null;

    if (str == null || str.equals("")) {
        return "";
    }

    int len = str.length();
    start = start < 0 ? len + start : start - 1;
    end = end < 0 ? len + end + 1 : end;

    return str.substring(start, end);
}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java小白笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值