java实现文件上传下载和图片压缩代码示例
作者:hebedich 时间:2023-01-02 17:49:30
分享一个在项目中用的到文件上传下载和对图片的压缩,直接从项目中扒出来的:)
package com.eabax.plugin.yundada.utils;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import net.coobird.thumbnailator.Thumbnails;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.eabax.plugin.yundada.GaContext;
public class FileUploadDownloadUtil {
private static final Logger log = LoggerFactory.getLogger(FileUploadDownloadUtil.class);
/**
* 上传文件到服务器
* @param request
* @param type
* @return
* @throws Exception
*/
public static String upload(HttpServletRequest request, String type) throws Exception {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
String saveFileName = null;
if (isMultipart) {
String savePath = request.getSession().getServletContext()
.getRealPath("/")
+ "/upload/";
String tempPath = request.getSession().getServletContext()
.getRealPath("/")
+ "/upload/temp/";
File saveFile = new File(savePath);
File tempFile = new File(tempPath);
if (!saveFile.isDirectory())
saveFile.mkdirs();
if (!tempFile.isDirectory())
tempFile.mkdirs();
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024 * 4);
factory.setRepository(tempFile);
ServletFileUpload uploader = new ServletFileUpload(factory);
uploader.setSizeMax(20 * 1024 * 1024);
List<FileItem> fileItems = uploader.parseRequest(request);
for (FileItem item : fileItems) {
if (item.isFormField()) {
// funName=item.getString();
} else {
// String fileName=item.getName();
// String
// fix=fileName.substring(fileName.lastIndexOf(".")+1);
String fix = type;
Date nowDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyyMMddhhmmss");
String fileName = sdf.format(nowDate);
fileName += System.currentTimeMillis();
fileName += "." + fix;
saveFileName = "/upload/" + fileName;
File file = new File(savePath + fileName);
item.write(file);
}
}
}
return saveFileName;
}
/**
* 上传头像
* @param request
* @param type
* @return
* @throws Exception
*/
public static String uploadHeadShow(HttpServletRequest request,GaContext context, String type) throws Exception {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
String saveFileName = null;
String imagePath = "/upload/headshow/";
String x = request.getParameter("length");
String y = request.getParameter("wide");
if (isMultipart) {
String headShowServicePath = request.getSession().getServletContext()
.getRealPath("/")
+ imagePath;
Date nowDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyyMMddhhmmss");
String fileName = context.getUsername()+sdf.format(nowDate);
File headShowFile = new File(headShowServicePath);
if (!headShowFile.isDirectory())
headShowFile.mkdirs();
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024 * 4);
factory.setRepository(headShowFile);
ServletFileUpload uploader = new ServletFileUpload(factory);
uploader.setSizeMax(20 * 1024 * 1024);
List<FileItem> fileItems = uploader.parseRequest(request);
for (FileItem item : fileItems) {
if (item.isFormField()) {
// funName=item.getString();
} else {
String fix = type;
fileName += "." + fix;
saveFileName = imagePath + fileName;
File file = new File(headShowServicePath + fileName);
item.write(file);
}
}
//压缩图片
if(x!=null&&!"".equals(x) && y!=null&&!"".equals(y)) {
saveFileName = thumbnailatorImage(imagePath, fileName, type, Integer.parseInt(x), Integer.parseInt(y));
}
}
return saveFileName;
}
/**
* 上传分享图片
* @param request
* @param type
* @return
* @throws Exception
*/
public static JSONObject uploadArticleImage(HttpServletRequest request,GaContext context, String type) throws Exception {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
JSONObject saveFileName = new JSONObject();
String imagePath = "";
String x = request.getParameter("length");
String y = request.getParameter("wide");
if("4".equals(type)) {
//分享上传图片路径
imagePath = "/upload/articleimage/";
}else if("5".equals(type)) {
//链接上传图片路径
imagePath = "/upload/linkimage/";
} else {
//头像上传图片路径
imagePath = "/upload/headshow/";
}
if (isMultipart) {
String headShowServicePath = request.getSession().getServletContext()
.getRealPath("/")
+ imagePath;
File headShowFile = new File(headShowServicePath);
if (!headShowFile.isDirectory())
headShowFile.mkdirs();
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024 * 4);
factory.setRepository(headShowFile);
ServletFileUpload uploader = new ServletFileUpload(factory);
uploader.setSizeMax(20 * 1024 * 1024);
List<FileItem> fileItems = uploader.parseRequest(request);
for (FileItem item : fileItems) {
UUID uuid = UUID.randomUUID();
String fileName = uuid.toString();
if (item.isFormField()) {
// funName=item.getString();
} else {
String fix = type;
fileName += "." + fix;
saveFileName.put( uuid.toString(),imagePath + fileName);
File file = new File(headShowServicePath + fileName);
item.write(file);
}
//压缩图片
if(x!=null&&!"".equals(x) && y!=null&&!"".equals(y)) {
String thumbnailatorName = thumbnailatorImage(imagePath, fileName, type, Integer.parseInt(x), Integer.parseInt(y));
saveFileName.put("thumbnailatorImage", thumbnailatorName);
}
}
}
return saveFileName;
}
/**
* 上传压缩压缩并保存图片
* @param oldSavePath 原文件路径
* @param oldFileName 原文件名称
* @param fix 文件类型
* @param x 需要压缩的宽度
* @param y 需要压缩的长度
* @return
* @throws IOException
*/
public static String thumbnailatorImage(String oldSavePath,String oldFileName,String fix,int x,int y) throws IOException {
//Thumbnail读取并压缩图片
BufferedImage waterMarkBufferedImage = Thumbnails.of(oldSavePath+oldFileName)
//Thumbnail的方法,压缩图片
.size(x, y)
//读取成BufferedImage对象
.asBufferedImage();
//把内存中的图片写入到指定的文件中
String savePath = oldSavePath+x+"-"+y+"/";
File saveFile = new File(savePath);
if (!saveFile.isDirectory())
saveFile.mkdirs();
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024 * 4);
factory.setRepository(saveFile);
ServletFileUpload uploader = new ServletFileUpload(factory);
uploader.setSizeMax(20 * 1024 * 1024);
UUID uuid = UUID.randomUUID();
String fileName = uuid.toString();
fileName += "." + fix;
String saveFileName = savePath+fileName;
File fileOutPut = new File(saveFileName);
ImageIO.write(waterMarkBufferedImage, fix, fileOutPut);
return saveFileName;
}
/**
* 下载压缩压缩并保存图片
* @param oldSavePath 原文件路径
* @param oldFileName 原文件名称
* @param fix 文件类型
* @param x 需要压缩的宽度
* @param y 需要压缩的长度
* @return
* @throws IOException
*/
public static String downloadThumbnailatorImage(String servicePath,String uri,int x,int y) throws IOException {
//校验图片是否存在
String uriSubPath = uri.substring(0, uri.lastIndexOf("/")+1);//文件名以前,服务器以后
String fileName = uri.substring(uri.lastIndexOf("/")+1,uri.length());//文件名
String getThumbnailatorPath = servicePath + uriSubPath+x+"-"+y+"/";
String saveFileName = getThumbnailatorPath+fileName;
File downFilePath = new File(getThumbnailatorPath);//压缩以后的文件夹
File downFile = new File(saveFileName);//压缩以后的文件
if (downFilePath.isDirectory()&&downFile.exists()) {
return saveFileName;
} else {
//Thumbnail读取并压缩图片
log.error(servicePath+uri);
BufferedImage waterMarkBufferedImage = Thumbnails.of(servicePath+uri)
//Thumbnail的方法,压缩图片
.size(x, y)
//读取成BufferedImage对象
.asBufferedImage();
if (!downFilePath.isDirectory()) {
downFilePath.mkdirs();
}
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024 * 4);
factory.setRepository(downFilePath);
ServletFileUpload uploader = new ServletFileUpload(factory);
uploader.setSizeMax(20 * 1024 * 1024);
File fileOutPut = new File(saveFileName);
ImageIO.write(waterMarkBufferedImage, "jpg", fileOutPut);
}
return saveFileName;
}
}
标签:java,上传,下载,图片压缩
0
投稿
猜你喜欢
Android中NestedScrolling滑动机制详解
2022-09-16 22:32:13
Android实现在xml文件中引用自定义View的方法分析
2021-05-28 01:43:57
Java日常练习题,每天进步一点点(10)
2022-08-11 21:55:53
Spring整合CXF webservice restful实例详解
2023-03-20 09:58:21
Reactor 多任务并发执行且结果按顺序返回第一个
2021-08-15 03:32:46
Java 按行读取文件按行写入文件并以空格分割字符串的方法
2023-08-31 12:32:21
Java使用Graphics2D绘制SVG和PNG的方法
2021-11-13 01:03:51
C#从DataTable获取数据的方法
2022-09-16 03:20:59
Java线程安全解决方案(synchronized,ReentrantLock,Atomic)
2022-06-13 12:51:09
使用Deflate算法对文件进行压缩与解压缩的方法详解
2022-01-27 09:48:49
Android 动画实现几种方案
2022-08-31 02:57:39
java struts2学习笔记之线程安全
2022-08-07 00:13:07
深入了解java.util.Arrays的使用技巧
2023-01-10 18:01:32
Android实现EditText图文混合插入上传功能
2022-08-27 10:19:50
Java面试重点中的重点之Elasticsearch核心原理
2021-08-03 07:34:16
设计模式在Spring框架中的应用汇总
2023-10-22 19:20:09
Java五种方式实现多线程循环打印问题
2023-03-07 20:34:12
error LNK2019: 无法解析的外部符号 问题的解决办法
2022-07-27 23:02:40
Android实现旋转动画
2022-05-15 15:26:15
C#利用FileSystemWatcher实时监控文件的增加,修改,重命名和删除
2021-08-21 05:46:28