java文件上传

本文介绍了一种基于二进制方式的文件上传方法,利用Spring MVC框架处理单文件及多文件上传,并详细展示了文件上传过程中的关键步骤,包括文件接收、重命名、存储等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

</pre><pre name="code" class="java">/**
     * 二进制方式上传文件
    * @Title: batyfileupload 
    * @param files
    * @param request
    * @return
    * @throws
     */
    @RequestMapping("/upload")
    public ModelAndView batyfileupload(
            @RequestParam("file") MultipartFile[] files,
            HttpServletRequest request) {
        UploadUtil uploadUtil = new UploadUtil();
        Map<String, String> readFiles = uploadUtil.fileByteUpload(files,
                request);
        return new ModelAndView("presentaudit/uploadexcel");
    }
   LOGGER.info("读取文件开始...");
            UploadUtil uploadUtil = new UploadUtil();
            // String path = uploadUtil.readUploadFiles(request); //
            // 上传文件并将文件保存在服务器本地 单个文件
            Map<String, String> readFiles = uploadUtil
                    .readUploadManyFiles(request); // 上传文件并将文件保存在服务器本地,用于多文件同时上传的情况
            LOGGER.info("读取文件完成");
/**
 * 文件上传
* @ClassName: UploadUtil 
* @author liu.li 
* @date 2016年4月27日 下午2:08:46
 */
public class UploadUtil {
    private static Logger logger = Logger.getLogger(UploadUtil.class);
    private static String FILEPATH = "/system.properties"; // 文件上传的配置文件
    private static String EXCELUPLOADPREFIX = "uploadExcel_";// 上传后存储的文件名称前缀
    private static String DEFAULT_FILEPATH = "D:\\UPLOAD\\";// 上传的路径

    /**
    
     * 文件上传
    * @Title: readUploadFiles 
    * @param request
    * @throws Exception
     * @throws IOException 
     * @throws IllegalStateException 
     * @throws UnsupportedEncodingException 
     */
    public String readUploadFiles(HttpServletRequest request)
            throws IllegalStateException, IOException {
        request.setCharacterEncoding("UTF-8"); // 处理中文乱码问题
        String path = null;
        // 创建一个通用的多部分解析器
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
                request.getSession().getServletContext());
        // 判断 request 是否有文件上传,即多部分请求
        if (multipartResolver.isMultipart(request)) {
            // 转换成多部分request
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
            // 取得request中的所有文件名
            Iterator<String> iter = multiRequest.getFileNames();
            while (iter.hasNext()) {
                // 记录上传过程起始时的时间,用来计算上传时间
                int pre = (int) System.currentTimeMillis();
                // 取得上传文件
                MultipartFile file = multiRequest.getFile(iter.next());
                if (file != null) {
                    // 取得当前上传文件的文件名称
                    String fileName = file.getOriginalFilename();
                    // 如果名称不为“”,说明该文件存在,否则说明该文件不存在
                    if (fileName.trim() != "") {
                        logger.info("upload file name is " + fileName);
                        // 重命名上传后的文件名
                        String fileNamenew = EXCELUPLOADPREFIX + timeStr()
                                + file.getOriginalFilename();
                        // 定义上传路径
                        path = DEFAULT_FILEPATH
                                + fileNamenew;
                        logger.info("upload file path is" + path);
                        File localFile = new File(path);
                        file.transferTo(localFile);
                    }
                }
                // 记录上传该文件后的时间
                int finaltime = (int) System.currentTimeMillis();
                logger.info(
                        "process upload file user time" + (finaltime - pre));
            }

        }
        return path;
    }
    
    /**
    
     * 多文件对应多模板
     * 该方法会调用文件校验的方法,根据模板校验文件名称
    * @Title: readUploadFilesCheckFile 
    * @param request
    * @return Map<String, String> Map<文件名称, 存放路径>
     * @throws IOException 
     * @throws IllegalStateException 
     * @throws UnsupportedEncodingException 
     */
    public Map<String, String> readUploadManyFiles(
HttpServletRequest request)
            throws IllegalStateException, IOException {
        Map<String, String> resMap = new HashMap<String, String>();
        request.setCharacterEncoding("UTF-8"); // 处理中文乱码问题
        String path = null;
        // 创建一个通用的多部分解析器
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
                request.getSession().getServletContext());
        // 判断 request 是否有文件上传,即多部分请求
        if (multipartResolver.isMultipart(request)) {
            // 转换成多部分request
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
            // 取得request中的所有文件名
            Iterator<String> iter = multiRequest.getFileNames();
            while (iter.hasNext()) {
                // 记录上传过程起始时的时间,用来计算上传时间
                int pre = (int) System.currentTimeMillis();
                // 取得上传文件
                MultipartFile file = multiRequest.getFile(iter.next());
                if (file != null) {
                    // 取得当前上传文件的文件名称
                    String fileName = file.getOriginalFilename();
                    /*
                     * // 校验文件名,此处不再校验对于上传,所有的文件都处理 if (null ==
                     * excelModelMap.get(fileName)) { continue; }
                     */
                    // 如果名称不为“”,说明该文件存在,否则说明该文件不存在
                    if (fileName.trim() != "") {
                        logger.info("upload file name is " + fileName);
                        // 重命名上传后的文件名
                        String fileNamenew = EXCELUPLOADPREFIX + timeStr()
                                + file.getOriginalFilename();
                        // 定义上传路径
                        path = DEFAULT_FILEPATH + fileNamenew;
                        logger.info("upload file path is" + path);
                        File localFile = new File(path);
                        file.transferTo(localFile);
                        resMap.put(fileName.substring(0,
                                fileName.lastIndexOf(".")), path);
                    }
                }
                // 记录上传该文件后的时间
                int finaltime = (int) System.currentTimeMillis();
                logger.info(
                        "process upload file user time" + (finaltime - pre));
            }

        }
        return resMap;
    }

    /**
     * 采用apache.commons的FileUtils.copyInputStreamToFile方式
    * @Title: fileByteUpload 
    * @Description: TODO(这里用一句话描述这个方法的作用) 
    * @param files
    * @return
    * @throws
     */
    public static Map<String, String> fileByteUpload(
MultipartFile[] files,
            HttpServletRequest request) {
        Map<String, String> resMap = new HashMap<String, String>();
        if (files.length > 0) {
            for (MultipartFile multipartFile : files) {
                String path = "";
                if (!multipartFile.isEmpty()) {
                    String fileNamenew = EXCELUPLOADPREFIX
 + timeStr()
                            + multipartFile.getOriginalFilename();
                    path = DEFAULT_FILEPATH + fileNamenew;
                    request.getServletContext().getContextPath();
                    File destFile = new File(DEFAULT_FILEPATH, fileNamenew);
                    try {
                        // FileUtils.copyInputStreamToFile()这个方法里对IO进行了自动操作,不需要额外的再去关闭IO流
                        FileUtils.copyInputStreamToFile(
                                multipartFile.getInputStream(), destFile);// 复制临时文件到指定目录下
                        resMap.put(
                                multipartFile.getOriginalFilename().substring(0,
                                        multipartFile.getOriginalFilename()
                                                .lastIndexOf(".")),
                                path);
                    } catch (IOException e) {
                        logger.error("上传文件异常:-->" + e);
                    }
                }
            }
        }
        return resMap;
    }

    /**
     * 时间获取到毫秒
    * @Title: timeStr 
    * @Description: TODO(这里用一句话描述这个方法的作用) 
    * @return
    * @throws
     */
    public static String timeStr() {
        Calendar c = Calendar.getInstance();// 可以对每个时间域单独修改
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int date = c.get(Calendar.DATE);
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);
        int second = c.get(Calendar.SECOND);
        int MI = c.get(Calendar.MILLISECOND);
        String timestr = year + "" + month + "" + date + "" + hour + "" + minute
                + "" + second + "" + MI;
        return timestr;
    }
}

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@ page contentType="text/html;charset=gb2312" language="java" import="java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*,java.sql.*,com.jspsmart.upload.*,java.util.*"%> <%@page import="java.io.File,java.util.Date;"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>上传文件</title> </head> <body> <table border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td height="45" align="center" valign="middle"> <form action="index.jsp?flag=1" method="post" enctype="multipart/form-data" name="form1"> <input type="file" name="file"> <input type="hidden" name="file"> <input type="submit" name="Submit" value="上传"> </form></td> </tr> </table> <% if(null != request.getParameter("flag")){ SmartUpload mySmartUpload =new SmartUpload(); long file_size_max=4000000; String fileName2="",ext="",testvar=""; String url="upload/"; //应保证在根目录中有此目录的存在(也就是说需要自己建立相应的文件夹) //初始化 mySmartUpload.initialize(pageContext); //只允许上载此类文件 try { mySmartUpload.setAllowedFilesList("xls");//此处的文件格式可以根据需要自己修改 //上载文件 mySmartUpload.upload(); } catch (Exception e){ %> <SCRIPT language=javascript> alert("只允许上传.xls类型文件"); </script> <% } try{ com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0); if (myFile.isMissing()){%> <SCRIPT language=javascript> alert("请先选择要上传的文件"); </script> <%} else{ String myFileName=myFile.getFileName(); //取得上载的文件的文件名 //out.println(myFileName); ext= myFile.getFileExt(); //取得后缀名 int file_size=myFile.getSize(); //取得文件的大小 String saveurl=""; if(file_size<file_size_max){ //更改文件名,取得当前上传时间的毫秒数值 //Calendar calendar = Calendar.getInstance(); Date date = new Date(); String filename = String.valueOf((1900+date.getYear()))+String.valueOf((date.getMonth()+1)); saveurl=application.getRealPath("/")+url; File file = new File(saveurl); if(!file.exists()){ file.mkdirs(); } saveurl+=filename+"."+ext; //保存路径 myFile.saveAs(saveurl,SmartUpload.SAVE_PHYSICAL); String ret = "alert('上传成功!');"; out.print("<script language=javascript>" + ret + "</script>"); } } }catch (Exception e){ out.print(e.toString()+"错误信息......................!"); } } %> </body> </html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值