java实现文件上传下载和图片压缩代码示例
分享一个在项目中用的到文件上传下载和对图片的压缩,直接从项目中扒出来的:)
packagecom.eabax.plugin.yundada.utils;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.IOException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.List;
importjava.util.UUID;
importjavax.imageio.ImageIO;
importjavax.servlet.http.HttpServletRequest;
importnet.coobird.thumbnailator.Thumbnails;
importorg.apache.commons.fileupload.FileItem;
importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
importorg.apache.commons.fileupload.servlet.ServletFileUpload;
importorg.json.JSONObject;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importcom.eabax.plugin.yundada.GaContext;
publicclassFileUploadDownloadUtil{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(FileUploadDownloadUtil.class);
/**
*上传文件到服务器
*@paramrequest
*@paramtype
*@return
*@throwsException
*/
publicstaticStringupload(HttpServletRequestrequest,Stringtype)throwsException{
booleanisMultipart=ServletFileUpload.isMultipartContent(request);
StringsaveFileName=null;
if(isMultipart){
StringsavePath=request.getSession().getServletContext()
.getRealPath("/")
+"/upload/";
StringtempPath=request.getSession().getServletContext()
.getRealPath("/")
+"/upload/temp/";
FilesaveFile=newFile(savePath);
FiletempFile=newFile(tempPath);
if(!saveFile.isDirectory())
saveFile.mkdirs();
if(!tempFile.isDirectory())
tempFile.mkdirs();
DiskFileItemFactoryfactory=newDiskFileItemFactory();
factory.setSizeThreshold(1024*4);
factory.setRepository(tempFile);
ServletFileUploaduploader=newServletFileUpload(factory);
uploader.setSizeMax(20*1024*1024);
List<FileItem>fileItems=uploader.parseRequest(request);
for(FileItemitem:fileItems){
if(item.isFormField()){
//funName=item.getString();
}else{
//StringfileName=item.getName();
//String
//fix=fileName.substring(fileName.lastIndexOf(".")+1);
Stringfix=type;
DatenowDate=newDate();
SimpleDateFormatsdf=newSimpleDateFormat(
"yyyyMMddhhmmss");
StringfileName=sdf.format(nowDate);
fileName+=System.currentTimeMillis();
fileName+="."+fix;
saveFileName="/upload/"+fileName;
Filefile=newFile(savePath+fileName);
item.write(file);
}
}
}
returnsaveFileName;
}
/**
*上传头像
*@paramrequest
*@paramtype
*@return
*@throwsException
*/
publicstaticStringuploadHeadShow(HttpServletRequestrequest,GaContextcontext,Stringtype)throwsException{
booleanisMultipart=ServletFileUpload.isMultipartContent(request);
StringsaveFileName=null;
StringimagePath="/upload/headshow/";
Stringx=request.getParameter("length");
Stringy=request.getParameter("wide");
if(isMultipart){
StringheadShowServicePath=request.getSession().getServletContext()
.getRealPath("/")
+imagePath;
DatenowDate=newDate();
SimpleDateFormatsdf=newSimpleDateFormat(
"yyyyMMddhhmmss");
StringfileName=context.getUsername()+sdf.format(nowDate);
FileheadShowFile=newFile(headShowServicePath);
if(!headShowFile.isDirectory())
headShowFile.mkdirs();
DiskFileItemFactoryfactory=newDiskFileItemFactory();
factory.setSizeThreshold(1024*4);
factory.setRepository(headShowFile);
ServletFileUploaduploader=newServletFileUpload(factory);
uploader.setSizeMax(20*1024*1024);
List<FileItem>fileItems=uploader.parseRequest(request);
for(FileItemitem:fileItems){
if(item.isFormField()){
//funName=item.getString();
}else{
Stringfix=type;
fileName+="."+fix;
saveFileName=imagePath+fileName;
Filefile=newFile(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));
}
}
returnsaveFileName;
}
/**
*上传分享图片
*@paramrequest
*@paramtype
*@return
*@throwsException
*/
publicstaticJSONObjectuploadArticleImage(HttpServletRequestrequest,GaContextcontext,Stringtype)throwsException{
booleanisMultipart=ServletFileUpload.isMultipartContent(request);
JSONObjectsaveFileName=newJSONObject();
StringimagePath="";
Stringx=request.getParameter("length");
Stringy=request.getParameter("wide");
if("4".equals(type)){
//分享上传图片路径
imagePath="/upload/articleimage/";
}elseif("5".equals(type)){
//链接上传图片路径
imagePath="/upload/linkimage/";
}else{
//头像上传图片路径
imagePath="/upload/headshow/";
}
if(isMultipart){
StringheadShowServicePath=request.getSession().getServletContext()
.getRealPath("/")
+imagePath;
FileheadShowFile=newFile(headShowServicePath);
if(!headShowFile.isDirectory())
headShowFile.mkdirs();
DiskFileItemFactoryfactory=newDiskFileItemFactory();
factory.setSizeThreshold(1024*4);
factory.setRepository(headShowFile);
ServletFileUploaduploader=newServletFileUpload(factory);
uploader.setSizeMax(20*1024*1024);
List<FileItem>fileItems=uploader.parseRequest(request);
for(FileItemitem:fileItems){
UUIDuuid=UUID.randomUUID();
StringfileName=uuid.toString();
if(item.isFormField()){
//funName=item.getString();
}else{
Stringfix=type;
fileName+="."+fix;
saveFileName.put(uuid.toString(),imagePath+fileName);
Filefile=newFile(headShowServicePath+fileName);
item.write(file);
}
//压缩图片
if(x!=null&&!"".equals(x)&&y!=null&&!"".equals(y)){
StringthumbnailatorName=thumbnailatorImage(imagePath,fileName,type,Integer.parseInt(x),Integer.parseInt(y));
saveFileName.put("thumbnailatorImage",thumbnailatorName);
}
}
}
returnsaveFileName;
}
/**
*上传压缩压缩并保存图片
*@paramoldSavePath原文件路径
*@paramoldFileName原文件名称
*@paramfix文件类型
*@paramx需要压缩的宽度
*@paramy需要压缩的长度
*@return
*@throwsIOException
*/
publicstaticStringthumbnailatorImage(StringoldSavePath,StringoldFileName,Stringfix,intx,inty)throwsIOException{
//Thumbnail读取并压缩图片
BufferedImagewaterMarkBufferedImage=Thumbnails.of(oldSavePath+oldFileName)
//Thumbnail的方法,压缩图片
.size(x,y)
//读取成BufferedImage对象
.asBufferedImage();
//把内存中的图片写入到指定的文件中
StringsavePath=oldSavePath+x+"-"+y+"/";
FilesaveFile=newFile(savePath);
if(!saveFile.isDirectory())
saveFile.mkdirs();
DiskFileItemFactoryfactory=newDiskFileItemFactory();
factory.setSizeThreshold(1024*4);
factory.setRepository(saveFile);
ServletFileUploaduploader=newServletFileUpload(factory);
uploader.setSizeMax(20*1024*1024);
UUIDuuid=UUID.randomUUID();
StringfileName=uuid.toString();
fileName+="."+fix;
StringsaveFileName=savePath+fileName;
FilefileOutPut=newFile(saveFileName);
ImageIO.write(waterMarkBufferedImage,fix,fileOutPut);
returnsaveFileName;
}
/**
*下载压缩压缩并保存图片
*@paramoldSavePath原文件路径
*@paramoldFileName原文件名称
*@paramfix文件类型
*@paramx需要压缩的宽度
*@paramy需要压缩的长度
*@return
*@throwsIOException
*/
publicstaticStringdownloadThumbnailatorImage(StringservicePath,Stringuri,intx,inty)throwsIOException{
//校验图片是否存在
StringuriSubPath=uri.substring(0,uri.lastIndexOf("/")+1);//文件名以前,服务器以后
StringfileName=uri.substring(uri.lastIndexOf("/")+1,uri.length());//文件名
StringgetThumbnailatorPath=servicePath+uriSubPath+x+"-"+y+"/";
StringsaveFileName=getThumbnailatorPath+fileName;
FiledownFilePath=newFile(getThumbnailatorPath);//压缩以后的文件夹
FiledownFile=newFile(saveFileName);//压缩以后的文件
if(downFilePath.isDirectory()&&downFile.exists()){
returnsaveFileName;
}else{
//Thumbnail读取并压缩图片
log.error(servicePath+uri);
BufferedImagewaterMarkBufferedImage=Thumbnails.of(servicePath+uri)
//Thumbnail的方法,压缩图片
.size(x,y)
//读取成BufferedImage对象
.asBufferedImage();
if(!downFilePath.isDirectory()){
downFilePath.mkdirs();
}
DiskFileItemFactoryfactory=newDiskFileItemFactory();
factory.setSizeThreshold(1024*4);
factory.setRepository(downFilePath);
ServletFileUploaduploader=newServletFileUpload(factory);
uploader.setSizeMax(20*1024*1024);
FilefileOutPut=newFile(saveFileName);
ImageIO.write(waterMarkBufferedImage,"jpg",fileOutPut);
}
returnsaveFileName;
}
}
以上就是本文分享的所有内容了,希望对大家能有所帮助。