分享一个在项目中用的到文件上传下载和对图片的压缩,直接从项目中扒出来的:)
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;
}
}
以上就是本文分享的所有内容了,希望对大家能有所帮助。
如对本文有疑问,
点击进行留言回复!!
网友评论