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; } }
以上就是本文分享的所有内容了,希望对大家能有所帮助。