package com.nova.sankuai.infra.utils;
|
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.multipart.MultipartFile;
|
import sun.misc.BASE64Encoder;
|
|
import java.io.*;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
import java.util.UUID;
|
import java.util.regex.Matcher;
|
import java.util.regex.Pattern;
|
|
/**
|
* @author weikangdi
|
*/
|
@Component
|
public class ImageUtil {
|
|
@Value("${upload.path}")
|
private String path;
|
|
@Value("${upload.publicPath}")
|
private String publicPath;
|
|
public String uploadFile(MultipartFile file, boolean isPublic) throws Exception {
|
// 文件名
|
String fileName = file.getOriginalFilename();
|
// 后缀名
|
String suffixName = fileName.substring(fileName.lastIndexOf("."));
|
// 上传后的路径
|
String filePath = isPublic ? publicPath : path;
|
String fileUrl = isPublic ? "/public/upload_img/" : "/upload_img/";
|
|
filePath = chooseOnTime(filePath);
|
fileUrl = chooseOnTime(fileUrl);
|
// 新文件名
|
|
fileName = UUID.randomUUID().toString().replace("-", "") + suffixName;
|
File dest = new File(filePath + fileName);
|
if (!dest.getParentFile().exists()) {
|
dest.getParentFile().mkdirs();
|
}
|
file.transferTo(dest);
|
String filename = fileUrl + fileName;
|
return filename;
|
}
|
|
|
public String uploadFileByInputStream(InputStream inputStream, boolean isPublic) throws Exception {
|
// 上传后的路径
|
String filePath = isPublic ? publicPath : path;
|
String fileUrl = isPublic ? "/public/upload_img/" : "/upload_img/";
|
|
filePath = chooseOnTime(filePath);
|
fileUrl = chooseOnTime(fileUrl);
|
// 文件名
|
String fileName = UUID.randomUUID().toString().replace("-", "") + ".png";
|
File dest = new File(filePath + fileName);
|
if (!dest.getParentFile().exists()) {
|
dest.getParentFile().mkdirs();
|
}
|
byte[] data = new byte[1024];
|
int len = 0;
|
FileOutputStream fileOutputStream = null;
|
try {
|
fileOutputStream = new FileOutputStream(dest);
|
while ((len = inputStream.read(data)) != -1) {
|
fileOutputStream.write(data, 0, len);
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
if (inputStream != null) {
|
try {
|
inputStream.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
if (fileOutputStream != null) {
|
try {
|
fileOutputStream.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
String filename = fileUrl + fileName;
|
return filename;
|
}
|
|
|
public String yxUploadFile(MultipartFile file, boolean isPublic) throws IOException {
|
// 文件名
|
String fileName = "";
|
// 上传后的路径
|
String filePath = isPublic ? publicPath : path;
|
String fileUrl = isPublic ? "/public/upload_img/" : "/upload_img/";
|
|
filePath = chooseOnTime(filePath);
|
fileUrl = chooseOnTime(fileUrl);
|
// 新文件名
|
fileName = UUID.randomUUID().toString().replace("-", "") + ".png";
|
File dest = new File(filePath + fileName);
|
if (!dest.getParentFile().exists()) {
|
dest.getParentFile().mkdirs();
|
}
|
file.transferTo(dest);
|
String filename = fileUrl + fileName;
|
return filename;
|
}
|
|
public String uploadBase64File(byte[] imageByte, boolean isPublic) throws IOException {
|
String fileName = UUID.randomUUID().toString().replace("-", "") + ".png";
|
|
// 上传后的路径
|
String filePath = isPublic ? publicPath : path;
|
String fileUrl = isPublic ? "/public/upload_img/" : "/upload_img/";
|
|
filePath = chooseOnTime(filePath);
|
fileUrl = chooseOnTime(fileUrl);
|
File dest = new File(filePath + fileName);
|
if (!dest.getParentFile().exists()) {
|
dest.getParentFile().mkdirs();
|
}
|
// 生成文件
|
if (!dest.exists()) {
|
dest.createNewFile();
|
}
|
OutputStream imageStream = new FileOutputStream(dest);
|
imageStream.write(imageByte);
|
imageStream.flush();
|
imageStream.close();
|
String filename = fileUrl + fileName;
|
return filename;
|
}
|
|
|
/**
|
* 判断上传文件大小方法
|
*
|
* @param len 文件长度
|
* @param size 限制大小
|
* @return
|
*/
|
public static boolean checkFileSize(Long len, int size) {
|
double fileSize = 0;
|
fileSize = (double) len / 1048576;
|
if (fileSize > size) {
|
return false;
|
}
|
return true;
|
}
|
|
public static String chooseOnTime(String path) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
String format = sdf.format(new Date());
|
return path + format + "/";
|
}
|
|
|
/**
|
* URL图片转base64
|
* @param imgUrl
|
* @return
|
*/
|
public static String imageUrlToBase64(String imgUrl) {
|
URL url = null;
|
InputStream is = null;
|
ByteArrayOutputStream outStream = null;
|
HttpURLConnection httpUrl = null;
|
try {
|
url = new URL(imgUrl);
|
httpUrl = (HttpURLConnection) url.openConnection();
|
httpUrl.connect();
|
httpUrl.getInputStream();
|
is = httpUrl.getInputStream();
|
outStream = new ByteArrayOutputStream();
|
//创建一个Buffer字符串
|
byte[] buffer = new byte[1024];
|
//每次读取的字符串长度,如果为-1,代表全部读取完毕
|
int len = 0;
|
//使用输入流从buffer里把数据读取出来
|
while( (len = is.read(buffer)) != -1 ){
|
//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
|
outStream.write(buffer, 0, len);
|
}
|
// 对字节数组Base64编码
|
return encode(outStream.toByteArray());
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
if(is != null) {
|
is.close();
|
}
|
if(outStream != null) {
|
outStream.close();
|
}
|
if(httpUrl != null) {
|
httpUrl.disconnect();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
return null;
|
}
|
|
/**
|
* 图片转字符串
|
* @param image 图片Buffer
|
* @return Base64编码
|
*/
|
public static String encode(byte[] image){
|
BASE64Encoder decoder = new BASE64Encoder();
|
return replaceEnter(decoder.encode(image));
|
}
|
|
/**
|
* 字符替换
|
* @param str 字符串
|
* @return 替换后的字符串
|
*/
|
public static String replaceEnter(String str){
|
String reg ="[\n-\r]";
|
Pattern p = Pattern.compile(reg);
|
Matcher m = p.matcher(str);
|
return m.replaceAll("");
|
}
|
}
|