之前在公司用到相册和音乐文件的功能,下面我们上代码看下:
package cn.aizhong.ebook.api.util;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.EncoderException;
import it.sauronsoftware.jave.InputFormatException;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;
import jdk.nashorn.internal.runtime.regexp.joni.Regex;
import org.apache.commons.io.FilenameUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.springframework.web.multipart.MultipartFile;
import cn.aizhong.ebook.base.Config;
import cn.aizhong.ebook.util.LoaclFileHandler;
import cn.aizhong.ebook.util.file.ImageHandler;
import cn.aizhong.ebook.util.file.UploadPath;
public class ToolUtil {
/**
* 将多页pdf转化为多张图片
* @param pdfPath
* @return
* @throws IOException
*/
public static List<String> pdfPathToImagePaths(String pdfPath){
try {
File pdfFile = new File(pdfPath);
PDDocument pdDocument;
pdDocument = PDDocument.load(pdfFile);
int pageCount = pdDocument.getNumberOfPages();
PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);
List<String> imagePathList = new ArrayList<>();
String fileParent = pdfFile.getParent();
Integer i=0;
FileOutputStream outputStream = null;
for(int pageIndex = 0; pageIndex < pageCount; pageIndex++) {
i++;
// String imgPath = fileParent + File.separator + UUID.randomUUID().toString() + ".png";
String name=i+"";//这里我设置了一下图片的名字,大家可以用上面被注释的
String imgPath =fileParent+ File.separator + name + ".png";
BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 105);
ImageIO.write(image, "png", new File(imgPath));
File files = new File(imgPath);
// 构造Image对象
BufferedImage src = javax.imageio.ImageIO.read(files);
// 放大边长
BufferedImage tag = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, 400, 300, null);
ImageIO.write(tag, "jpg", new File(imgPath+".400x300.png"));//使用io流进行存储
String[] split = imgPath.split("1000");
// String arm="\\1000"+split[1];
String asm="1000"+split[1];
imagePathList.add(asm.replaceAll("\\\\","/"));//进行格式转换
}
pdDocument.close();//释放
return imagePathList;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//pdf
public static String upload(MultipartFile file, Integer companyId) {
OutputStream os = null;
InputStream inputStream = null;
String fileName = null;
// 文件后缀
String ext = FilenameUtils.getExtension(file.getOriginalFilename());
String patha = UploadPath.getNFTIMGPath(companyId,
UploadPath.getFileName("." + ext));
try {
inputStream = file.getInputStream();
fileName = file.getOriginalFilename();
String[] split = patha.split("/");
String paths="";
for (int i = 0; i < split.length; i++) {
if(i==4){
break;
}
paths+=split[i]+"/";
}
// fileName=filterChinese(fileName);
// String path =Config.CONFIG_MAP.get("company.imglib")+paths.substring(0, paths.length()-1);
String path =Config.CONFIG_MAP.get("company.imglib")+paths+fileName.replaceAll("."+ext,"")+"/";
// 2、保存到临时文件
// 1K的数据缓冲
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
// 输出的文件流保存到本地文件
File tempFile = new File(path);
if (!tempFile.exists()) {
tempFile.mkdirs();
}
os = new FileOutputStream(tempFile.getPath() + File.separator + fileName);
// 开始读取
while ((len = inputStream.read(bs)) != -1) {
os.write(bs, 0, len);
}
return paths+fileName.replaceAll("."+ext,"")+"/"+fileName;
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//普通的文件
public static String uploads(MultipartFile file, Integer companyId) {
OutputStream os = null;
InputStream inputStream = null;
String fileName = null;
// 文件后缀
String ext = FilenameUtils.getExtension(file.getOriginalFilename());
String patha = UploadPath.getNFTIMGPath(companyId,
UploadPath.getFileName("." + ext));
try {
inputStream = file.getInputStream();
fileName = file.getOriginalFilename();
String[] split = patha.split("/");
String paths="";
for (int i = 0; i < split.length; i++) {
if(i==4){
break;
}
paths+=split[i]+"/";
}
String path =Config.CONFIG_MAP.get("manual.img")+patha.replace("."+ext,"");//存入路径
// 2、保存到临时文件
// 1K的数据缓冲
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
// 输出的文件流保存到本地文件
File tempFile = new File(path);
if (!tempFile.exists()) {
tempFile.mkdirs();
}
os = new FileOutputStream(tempFile.getPath()+ File.separator + fileName);
// 开始读取
while ((len = inputStream.read(bs)) != -1) {
os.write(bs, 0, len);
}
return patha.replace("."+ext,"")+"/"+fileName;//返回文件的路径
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//单个图片
public static String uploadsImg(MultipartFile file, Integer companyId, String listSize, String urls) {
OutputStream os = null;
InputStream inputStream = null;
// 文件后缀
String ext = FilenameUtils.getExtension(file.getOriginalFilename());
String patha = UploadPath.getNFTIMGPath(companyId,
UploadPath.getFileName("." + ext));
try {
inputStream = file.getInputStream();
String path="";
if(urls!=null&&urls.length()>0){//判断是否是一张之后的图片
path=Config.CONFIG_MAP.get("manual.img")+urls;//路径
}else{
path =Config.CONFIG_MAP.get("manual.img")+patha.replace("."+ext,"")+"/";//路径
}
// 2、保存到临时文件
// 1K的数据缓冲
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
// 输出的文件流保存到本地文件
File tempFile = new File(path);
if (!tempFile.exists()) {
tempFile.mkdirs();
}
os = new FileOutputStream(tempFile.getPath()+ File.separator + listSize+".jpg");
// 开始读取
while ((len = inputStream.read(bs)) != -1) {
os.write(bs, 0, len);
}
File filess = new File(path+ listSize+".jpg");
// 构造Image对象
BufferedImage src = javax.imageio.ImageIO.read(filess);
// 放大边长
BufferedImage tag = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, 400, 300, null);
ImageIO.write(tag, "jpg", new File(path+ listSize+"."+ext+".400x300.jpg"));
if(urls!=null&&urls.length()>0){
return path.replace(Config.CONFIG_MAP.get("manual.img"),"")+listSize+".jpg";
}
return patha.replace("."+ext,"")+"/"+listSize+".jpg";//返回文件的路径
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 过滤掉中文
* @param str 待过滤中文的字符串
* @return 过滤掉中文后字符串
*/
public static String filterChinese(String str) {
// 用于返回结果
String result = str;
boolean flag = isContainChinese(str);
if (flag) {// 包含中文
// 用于拼接过滤中文后的字符
StringBuffer sb = new StringBuffer();
// 用于校验是否为中文
boolean flag2 = false;
// 用于临时存储单字符
char chinese = 0;
// 5.去除掉文件名中的中文
// 将字符串转换成char[]
char[] charArray = str.toCharArray();
// 过滤到中文及中文字符
for (int i = 0; i < charArray.length; i++) {
chinese = charArray[i];
flag2 = isChinese(chinese);
if (!flag2) {// 不是中日韩文字及标点符号
sb.append(chinese);
}
}
result = sb.toString();
}
return result;
}
/* 校验一个字符是否是汉字
*
* @param c
* 被校验的字符
* @return true代表是汉字
*/
public static boolean isChineseChar(char c) {
try {
return String.valueOf(c).getBytes("UTF-8").length > 1;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 判定输入的是否是汉字
*
* @param c
* 被校验的字符
* @return true代表是汉字
*/
public static boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
return true;
}
return false;
}
/**
* 判断字符串中是否包含中文
* @param str
* 待校验字符串
* @return 是否为中文
* @warn 不能校验是否为中文标点符号
*/
public static boolean isContainChinese(String str) {
Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
Matcher m = p.matcher(str);
if (m.find()) {
return true;
}
return false;
}
/**
* 音乐获取时长
*/
public static String getMusicDuration(MultipartFile meua,String realPath){
String filename = meua.getOriginalFilename();
String sname = new Date().getTime()+"-"+filename;
Encoder encoder = new Encoder();
long length;
try {
File file=new File(realPath);
// length = encoder.getInfo(new File(realPath,sname)).getDuration();
// System.out.println("==length=="+length/1000/60+"分"+length/1000%60+"秒");
length=encoder.getInfo(file).getDuration()/1000;
System.out.println(length/60+"分"+length%60+"秒");
return length/60+"分"+length%60+"秒";
} catch (InputFormatException e) {
e.printStackTrace();
} catch (EncoderException e) {
e.printStackTrace();
}
return null;
}
}
下面是转化图片的jar包,不是用maven的可以私聊我
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
<version>2.0.15</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.15</version>
</dependency>