`

文件上传和下载

 
阅读更多

package com.framework.common.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

/**
 * <pre>
 * Copy right information:
 * Project:gene
 * File Name:FileOperateUtil.java
 * JDK version used:
 * Commends:
 *
 *
 * Modification history    :
 * date            ver.    author            what is modified
 * ---------    ----    ---------    ---------------------------
 * 2013-12-14        1.0        Administrator         new
 * </pre>
 *
 * @author Administrator
 * @version 1.0
 */
public class FileUploadUtil {

    /**
     * 文件真实名称
     */
    public static final String REALNAME = "realName";
    /**
     * 文件修改后名称
     */
    public static final String STORENAME = "storeName";
    /**
     *  文件大小
     */
    public static final String SIZE = "size";
    /**
     *  文件后缀
     */
    public static final String SUFFIX = "suffix";
    /**
     *  文件的mimeType
     */
    public static final String CONTENTTYPE = "contentType";
    /**
     *  创建时间
     */
    public static final String CREATETIME = "createTime";
    /**
     * 文件路径
     */
    public static final String FILEPATH = "filePath";
     /**
      * 将上传的文件进行重命名  
      *
      * make by Administrator on 2013-12-14 上午10:59:54
      * @param name
      * @return
      */
    private static String rename(String name) { 
 
        Long now = Long.parseLong(new SimpleDateFormat("yyyyMMddHHmmss") 
                .format(new Date())); 
        Long random = (long) (Math.random() * now); 
        String fileName = now + "" + random; 
 
        if (name.indexOf(".") != -1) { 
            fileName += name.substring(name.lastIndexOf(".")); 
        } 
        return fileName; 
    }
   
    /**
     * 获得日期yyyyMMddHHmmss随机名称
     *
     * make by Administrator on 2014-4-15 上午10:43:30
     * @return
     */
    public static String rename() { 
         
        Long now = Long.parseLong(new SimpleDateFormat("yyyyMMddHHmmss") 
                .format(new Date())); 
        Long random = (long) (Math.random() * now); 
        String fileName = now + "" + random;   
        return fileName; 
    }
   
   
    /**
     * 压缩后的文件名
     * demo.xml = demo.zip
     * make by Administrator on 2013-12-14 上午10:59:46
     * @param name
     * @return
     */
    private static String zipName(String name) { 
        String prefix = ""; 
        if (name.indexOf(".") != -1) { 
            prefix = name.substring(0, name.lastIndexOf(".")); 
        } else { 
            prefix = name; 
        } 
        return prefix + ".zip"; 
    }
   
    /**
     * 获得文件后缀
     *
     * make by Administrator on 2013-12-14 下午02:14:01
     * @param path
     * @return
     */
    private static String suffixName(String path){
        String suffix = "";
        if(path.lastIndexOf(".")!= -1){
            suffix = path.substring(path.lastIndexOf(".")+1, path.length());
        }
        return suffix;
    }
   
   
    /**
     * * 上传单个文件
     *
     * make by Administrator on 2013-12-14 下午03:11:07
     * @param srcFile      MultipartFile
     * @param isZip        对上传文件是否进行压缩
     * @param uploadDir    上传路径
     * @return
     * @throws Exception
     */
    public static Map<String, Object> upload(MultipartFile srcFile,Boolean isZip,String uploadDir) throws Exception { 
 
        // 判断是否压缩
        boolean isBlooZip = (isZip == null ? false : isZip);

     
        File file = new File(uploadDir);

        if (!file.exists()) {
            file.mkdir();
        }

        String fileName = null;

        // 判断上传文件大小为0不上传
        if ("".equals(srcFile.getOriginalFilename()) && srcFile.getSize() == 0
                && srcFile.isEmpty() == true)
            return null;

        // 源文件名称
        fileName = srcFile.getOriginalFilename();

        // 修改后文件名称
        String storeName = rename(fileName);
        if(!uploadDir.endsWith(File.separator))
            uploadDir+=File.separator;
       
        // 文件上传路径
        String noZipName = uploadDir + storeName;

        if (isBlooZip) { // 压缩处理
            String zipName = zipName(noZipName);

            // 上传成为压缩文件
            ZipOutputStream outputStream = new ZipOutputStream(
                    new BufferedOutputStream(new FileOutputStream(zipName)));
            outputStream.putNextEntry(new ZipEntry(fileName));
            outputStream.setEncoding("utf-8");

            FileCopyUtils.copy(srcFile.getInputStream(), outputStream);
        } else { // 不压缩
            File uploadFile = new File(noZipName);
            FileCopyUtils.copy(srcFile.getBytes(), uploadFile);
        }

        Map<String, Object> map = new HashMap<String, Object>();
        // 固定参数值对
        map.put(FileUploadUtil.REALNAME, isBlooZip ? zipName(fileName)
                : fileName);
        map.put(FileUploadUtil.STORENAME, isBlooZip ? zipName(storeName)
                : storeName);
       
        map.put(FileUploadUtil.FILEPATH, isBlooZip ? zipName(noZipName) : noZipName);
       
        map.put(FileUploadUtil.SIZE, new File(isBlooZip ? zipName(noZipName)
                : noZipName).length());
        map.put(FileUploadUtil.SUFFIX,
                suffixName(isBlooZip ? zipName(noZipName) : noZipName));
        map.put(FileUploadUtil.CONTENTTYPE, srcFile.getContentType());
        map.put(FileUploadUtil.CREATETIME, new Date());
 
        return map; 
    } 
    /**
     * * 上传文件
     *
     * make by Administrator on 2013-12-14 下午03:11:07
     * @param request      Request
     * @param isZip        对上传文件是否进行压缩
     * @param uploadDir    上传路径
     * @return
     * @throws Exception
     */
    public static List<Map<String, Object>> upload(HttpServletRequest request,Boolean isZip,String uploadDir) throws Exception { 
         
        //判断是否压缩
        boolean isBlooZip = (isZip==null?false:isZip);
       
        List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(); 
 
        MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request; 
        Map<String, MultipartFile> fileMap = mRequest.getFileMap(); 
 
        File file = new File(uploadDir); 
 
        if (!file.exists()) { 
            file.mkdir(); 
        } 
 
        String fileName = null; 
        int i = 0; 
        for (Iterator<Map.Entry<String, MultipartFile>> it = fileMap.entrySet().iterator(); it.hasNext(); i++) { 
 
            Map.Entry<String, MultipartFile> entry = it.next(); 
            MultipartFile mFile = entry.getValue();
           
            //判断上传文件大小为0不上传
            if("".equals(mFile.getOriginalFilename()) && mFile.getSize()==0 && mFile.isEmpty()==true)continue;
           
            //源文件名称
            fileName = mFile.getOriginalFilename(); 
           
            //修改后文件名称
            String storeName = rename(fileName); 
           
            //文件上传路径
            String noZipName = uploadDir + storeName;
           
            if(isBlooZip){ //压缩处理
                String zipName = zipName(noZipName); 
                 
                // 上传成为压缩文件 
                ZipOutputStream outputStream = new ZipOutputStream( 
                        new BufferedOutputStream(new FileOutputStream(zipName))); 
                outputStream.putNextEntry(new ZipEntry(fileName)); 
                outputStream.setEncoding("utf-8"); 
     
                FileCopyUtils.copy(mFile.getInputStream(), outputStream);
            }else{ //不压缩
                File uploadFile = new File(noZipName);
                FileCopyUtils.copy(mFile.getBytes(), uploadFile);
            }
             
            Map<String, Object> map = new HashMap<String, Object>(); 
            // 固定参数值对 
            map.put(FileUploadUtil.REALNAME, isBlooZip?zipName(fileName):fileName); 
            map.put(FileUploadUtil.STORENAME, isBlooZip?zipName(storeName):storeName); 
            map.put(FileUploadUtil.SIZE, new File(isBlooZip?zipName(noZipName):noZipName).length()); 
            map.put(FileUploadUtil.SUFFIX, suffixName(isBlooZip?zipName(noZipName):noZipName)); 
            map.put(FileUploadUtil.CONTENTTYPE, mFile.getContentType()); 
            map.put(FileUploadUtil.CREATETIME, new Date()); 
            map.put(FileUploadUtil.FILEPATH, isBlooZip ? zipName(noZipName) : noZipName);
           
            result.add(map); 
        } 
        return result; 
    } 
    /**
     * 文件下载
     *
     * make by Administrator on 2013-12-14 上午11:03:05
     * @param request        Request
     * @param response       Response
     * @param filePath       文件修改后的名称+地址
     * @param contentType    内容类型[application/octet-stream]
     * @param realName       下载文件真实名称
     * @throws Exception
     */
    public static void download(HttpServletRequest request, 
            HttpServletResponse response, String filePath, String contentType, 
            String realName) throws Exception { 
        response.setContentType("text/html;charset=UTF-8"); 
        request.setCharacterEncoding("UTF-8"); 
        BufferedInputStream bis = null; 
        BufferedOutputStream bos = null; 
        long fileLength = new File(filePath).length(); 
 
        response.setContentType(contentType); 
        response.setHeader("Content-disposition", "attachment; filename=" 
                + new String(realName.getBytes("gb2312"), "ISO8859-1")); 
        response.setHeader("Content-Length", String.valueOf(fileLength)); 
 
        bis = new BufferedInputStream(new FileInputStream(filePath)); 
        bos = new BufferedOutputStream(response.getOutputStream()); 
        byte[] buff = new byte[2048]; 
        int bytesRead; 
        while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { 
            bos.write(buff, 0, bytesRead); 
        } 
        bis.close(); 
        bos.close(); 
    } 
}

分享到:
评论

相关推荐

    文件上传和下载文件上传和下载文件上传和下载

    文件上传和下载是Web应用程序中的核心功能之一,无论是用户向服务器提交个人资料、分享文档,还是从服务器获取资源,如软件更新、电子书籍等,都离不开这一操作。在这个过程中,前端与后端的交互以及数据的安全传输...

    java文件上传和下载功能

    在Java编程领域,文件上传和下载是Web应用中常见的功能,尤其在用户交互丰富的网站或系统中。本项目通过一个简单的源码实例,演示了如何实现在JSP(JavaServer Pages)界面上处理文本和图片的上传与下载,涵盖了相关...

    文件上传和下载,代码编写,步骤

    无论是用户头像上传、文档管理还是多媒体资源分享等场景,都离不开文件的上传与下载操作。本文将详细介绍如何在Java Web应用中实现文件的上传和下载功能,并提供具体的代码示例。 #### 二、文件上传的基本原理 ...

    文件上传和下载的常见测试点

    文件上传和下载测试点总结 文件上传和下载是许多应用程序和网站的基本功能之一,在进行测试时需要考虑多个方面的测试点,以下是文件上传和下载的常见测试点: 下载测试点 1. 右键另存为是否可以正确下载文件,...

    Qt5.8用FTP实现文件上传和下载(带进度条)

    在本文中,我们将深入探讨如何使用Qt5.8框架通过FTP协议实现文件的上传和下载功能,同时结合进度条来实时展示操作进度。Qt是一个功能强大的C++库,提供了丰富的图形用户界面(GUI)工具和网络通信接口,使得开发者...

    jsp文件的上传和下载

    在Java Web开发中,JSP(JavaServer Pages)常常用于创建动态网页,配合Servlet处理用户交互,例如文件的上传和下载。本项目专注于解决在JSP中实现文件上传和下载时遇到的一些常见问题,特别是针对中文文件名的处理...

    ssh文件上传和下载

    ssh下实现用户登陆 管理文件 文件的上传与下载

    PHP文件上传和下载

    在PHP中,文件上传和下载是两个非常重要的功能,它们在Web开发中有着广泛的应用,例如用户上传头像、分享文件或下载资源等。本文将详细介绍如何使用PHP实现这两个功能。 首先,我们从文件上传开始。PHP提供了`$_...

    java代码实现文件上传和下载

    在java代码中实现文件的上传和下载,通过页面的file文件上传到java代码段,获取文件的大小和名字

    javaweb简单实现文件上传与下载源代码

    在JavaWeb开发中,文件上传和下载是常见的功能需求,特别是在构建交互性强的Web应用时。本源代码示例提供了一个简单的实现,帮助开发者理解如何处理这些操作。下面将详细解释涉及的技术点。 1. **文件上传** - **...

    SSH实现文件上传和下载

    文件上传和下载是 J2EE 编程中一个古老而重要的话题,SSH 框架提供了一个简捷方便的文件上传下载的方案,通过一些配置和少量的代码就可以完好解决这个问题。 总体实现 上传文件保存到 T_FILE 表中,T_FILE 表结构...

    asp 文件上传和下载

    在ASP文件上传和下载的场景中,开发者通常会利用ASP技术来实现用户通过Web界面上传文件到服务器,以及从服务器下载文件的功能。下面将详细阐述这个过程中的关键知识点。 一、文件上传 1. HTML表单:文件上传的第一...

    ASP实现文件上传和下载

    另外,"上传下载实例"可能是包含示例代码的ASP文件,演示如何使用这两个组件进行实际操作。这些示例对于初学者来说非常宝贵,因为它们展示了如何在实际项目中集成和使用这些组件。同时,"详细说明文档"应提供了关于...

    javaweb文件上传与下载模块源代码

    在Java Web开发中,文件上传和下载是常见的功能需求,特别是在构建交互性强的Web应用程序时。这个"javaweb文件上传与下载模块源代码"提供了一个实现这些功能的基础框架,对于初学者和Java程序员来说,这是一个很好的...

    文件上传和下载 .rar

    3. 断点续传:为了支持大文件下载和网络中断后的继续,服务器需要记录已下载的部分,并允许客户端通过HTTP的Range头请求特定范围的内容。 三、安全性 1. 验证:在接收文件上传前,应验证用户身份,防止恶意用户...

    .NET文件上传和下载

    在.NET平台上进行文件上传和下载是常见的Web应用功能,它涉及到客户端与服务器之间的数据交互,以及数据的安全存储和访问控制。在这个项目中,开发者已经创建了一个包含数据库支持、开源实现的示例,不仅展示了文件...

    上传下载一个JSP上传图片和文件实例

    综上所述,JSP实现图片和文件上传下载涉及到前端HTML表单、后端JSP或Servlet处理、文件存储管理、安全措施以及性能优化等多个环节。理解并熟练掌握这些知识点,能够帮助开发者构建稳定、安全、高效的文件上传下载...

Global site tag (gtag.js) - Google Analytics