微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java实现文件上传下载和图片压缩代码示例

本文给大家介绍的是项目中经常需要用到的一个常用的功能,使用java实现文件上传下载和图片的压缩功能,这里推荐给大家,有需要的小伙伴参考下。

分享一个在项目中用的到文件上传下载和对图片的压缩,直接从项目中扒出来的:)

复制代码 代码如下:

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 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 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 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;

    }

}

以上就是本文分享的所有内容了,希望对大家能有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐