工具类(网络文件下载到本地)
package com.cpiaoju.constructionbank.util;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.ccb.sdk.CCBSDK;
import com.cpiaoju.constructionbank.constant.SysInstance;
import com.cpiaoju.constructionbank.entity.FileInfo;
import com.cpiaoju.constructionbank.exception.SysException;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.time.LocalDateTime;
import java.util.List;
@Slf4j
public abstract class SysUtil {
/**
* 上传文件并返回
*
* @param path 文件本地服务器路径
* @return 文件ID、文件密码
*/
public static FileInfo getFileIdAndPwd(String path) {
try {
String res = CCBSDK.upload(path);
log.info("===>调用建行文件上传接口,返回值:【{}】", res);
JSONObject jsonObject = JSONUtil.parseObj(res);
JSONObject data = jsonObject.getJSONObject("Data");
String fileId = data.getStr("File_Id");
String authCode = data.getStr("Auth_Code");
String fileName = data.getStr("File_Name");
if (StrUtil.isNotBlank(fileId) && StrUtil.isNotBlank(authCode) && StrUtil.isNotBlank(fileName)) {
return FileInfo.builder().fileId(fileId).filePswd(authCode).fileName(fileName).build();
}
log.error("文件上传异常,未获取到文件ID、文件密码");
throw new SysException("文件上传异常");
} catch (Exception e) {
log.error("调用建行文件上传接口异常");
e.printStackTrace();
throw new SysException("文件上传异常");
}
}
/**
* 将网路图片保存到本地
*
* @param url 文件网络地址
* @param filePath 文件保存地址
* @param fileName 文件名称
*/
public static String saveFileByUrl(String url, String filePath, String fileName) {
//String fileName = SysUtil.genFileName(url);
//创建不同的文件夹目录
File file = new File(filePath);
//判断文件夹是否存在
if (!file.exists()) {
//如果文件夹不存在,则创建新的的文件夹
file.mkdirs();
}
FileOutputStream fileOut = null;
HttpURLConnection conn = null;
InputStream inputStream = null;
try {
// 建立链接
URL httpUrl = new URL(url);
conn = (HttpURLConnection) httpUrl.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(true);
// post方式不能使用缓存
conn.setUseCaches(false);
//连接指定的资源
conn.connect();
//获取网络输入流
inputStream = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(inputStream);
//判断文件的保存路径后面是否以/结尾
if (!filePath.endsWith("/")) {
filePath += "/";
}
//写入到文件(注意文件保存路径的后面一定要加上文件的名称)
fileOut = new FileOutputStream(filePath + fileName);
BufferedOutputStream bos = new BufferedOutputStream(fileOut);
byte[] buf = new byte[4096];
int length = bis.read(buf);
//保存文件
while (length != -1) {
bos.write(buf, 0, length);
length = bis.read(buf);
}
bos.close();
bis.close();
conn.disconnect();
return filePath + fileName;
} catch (Exception e) {
e.printStackTrace();
throw new SysException("文件处理异常");
}
}
/**
* 将网路图片保存到本地
*
* @param url 文件网络地址
* @param filePath 文件保存地址
* @param fileName 文件名称
*/
public static void saveFileByUrlAndFileName(String url, String filePath,String fileName) {
//创建不同的文件夹目录
File file = new File(filePath);
//判断文件夹是否存在
if (!file.exists()) {
//如果文件夹不存在,则创建新的的文件夹
file.mkdirs();
}
FileOutputStream fileOut = null;
HttpURLConnection conn = null;
InputStream inputStream = null;
try {
// 建立链接
URL httpUrl = new URL(url);
conn = (HttpURLConnection) httpUrl.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(true);
// post方式不能使用缓存
conn.setUseCaches(false);
//连接指定的资源
conn.connect();
//获取网络输入流
inputStream = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(inputStream);
//判断文件的保存路径后面是否以/结尾
if (!filePath.endsWith("/")) {
filePath += "/";
}
//写入到文件(注意文件保存路径的后面一定要加上文件的名称)
fileOut = new FileOutputStream(filePath + fileName);
BufferedOutputStream bos = new BufferedOutputStream(fileOut);
byte[] buf = new byte[4096];
int length = bis.read(buf);
//保存文件
while (length != -1) {
bos.write(buf, 0, length);
length = bis.read(buf);
}
bos.close();
bis.close();
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
throw new SysException("文件处理异常");
}
}
public static void saveFileByUrl(String url, String filePath) {
String fileName = SysUtil.genFileName(url);
//创建不同的文件夹目录
File file = new File(filePath);
//判断文件夹是否存在
if (!file.exists()) {
//如果文件夹不存在,则创建新的的文件夹
file.mkdirs();
}
FileOutputStream fileOut = null;
HttpURLConnection conn = null;
InputStream inputStream = null;
try {
// 建立链接
URL httpUrl = new URL(url);
conn = (HttpURLConnection) httpUrl.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(true);
// post方式不能使用缓存
conn.setUseCaches(false);
//连接指定的资源
conn.connect();
//获取网络输入流
inputStream = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(inputStream);
//判断文件的保存路径后面是否以/结尾
if (!filePath.endsWith("/")) {
filePath += "/";
}
//写入到文件(注意文件保存路径的后面一定要加上文件的名称)
fileOut = new FileOutputStream(filePath + fileName);
BufferedOutputStream bos = new BufferedOutputStream(fileOut);
byte[] buf = new byte[4096];
int length = bis.read(buf);
//保存文件
while (length != -1) {
bos.write(buf, 0, length);
length = bis.read(buf);
}
bos.close();
bis.close();
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
throw new SysException("文件处理异常");
}
}
public static void saveFileByUrl(List<String> urls, String filePath) {
urls.forEach(url -> SysUtil.saveFileByUrl(url, filePath));
}
/**
* 推送订单时,订单编号请按照 平台方缩写+年月日时+6位数字 的格式推送
*
* @return 订单编号
*/
public static String genOrderId() {
return "LX" + DateUtil.format(LocalDateTime.now(), "yyyyMMddHH") + RandomUtil.randomInt(100000, 1000000);
}
/**
* 生成文件名
*/
public static String genFileName(String suffix) {
return IdUtil.fastSimpleUUID() + suffix;
}
/**
* 生成路径
*/
public static String appendPath(String fileName) {
String os = System.getProperty("os.name");
// windows使用反斜杠
if (StrUtil.containsIgnoreCase(os, SysInstance.SYSTEM_WINDOWS)) {
fileName += "\\";
} else {
fileName += "/";
}
File upload = new File(fileName);
if (!upload.exists()) {
upload.mkdirs();
}
return fileName;
}
}