• 利用springMVC包装类上传多个文件


    前端JSP页面代码片段:

    <!-- springMVC包装类上传文件 -->
    <form name="uploadFiles" id="uploadFiles" action="http://sdoa.vaiwan.com:8081/sdoa/file/uploadFiles.do" enctype="multipart/form-data" method="post">
    <div id="addFilelist">
    <div id="file_0">
    <input type="file" name="file_0" multiple="multiple" >
    </div>
    </div>
    <input type="button" id="btn_add_file" value="增加一行" onclick="add_file()">
    <input type="submit" value="上传" >
    </form>
    <script>
    j=1;
    function add_file(){
    document.getElementById("addFilelist").innerHTML+='<div id="file_'+j+'"><input name="file_'+j+'" type="file" /><input type="button" value="删除" onclick="del_file('+j+')"/></div>';
    j = j + 1;
    }
    function del_file(o){
    document.getElementById("addFilelist").removeChild(document.getElementById("file_"+o));
    }

    </script>

    java后台SpringMVC uploadFilesController类代码
    @RequestMapping("uploadFiles.do")
    @ResponseBody
    public String uploadFiles(HttpServletRequest request, HttpServletResponse response) throws IllegalStateException, IOException {
    System.out.println("*********************进入uploadFiles(HttpServletRequest request, HttpServletResponse response)方法********************");
    String returnPath = "";
    //创建一个通用的多部分解析器 将当前上下文初始化给CommonsMultipartResolver多部分解析器
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
    //判断 request 是否有文件上传,即多部分请求 检查form中是否有 enctype="multipart/form-data"属性值
    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 myFileName = file.getOriginalFilename();
    //如果名称不为“”,说明该文件存在,否则说明该文件不存在
    if(myFileName.trim() !=""){
    System.out.println(myFileName);
    //重命名上传后的文件名
    String fileOriginalName = file.getOriginalFilename();
    String newFileName=UUID.randomUUID()+fileOriginalName.substring(fileOriginalName.lastIndexOf("."));
    String savedPath = request.getSession().getServletContext().getRealPath("/") + "uploadFiles/";//获取服务器指定文件存取路径
    File saveDir = new File(savedPath);
    if (!saveDir.exists()){
    saveDir.mkdirs();
    }
    File savedFile = new File(savedPath,newFileName);
    System.out.println(savedPath+"*********"+savedFile);
    boolean isCreateSuccess = savedFile.createNewFile();
    if(isCreateSuccess){
    file.transferTo(savedFile); //转存文件
    }
    if (returnPath != null && returnPath != ""){
    returnPath = returnPath +";"+ savedFile;
    }else {
    returnPath = returnPath + savedFile;
    }
    }
    }
    //记录上传该文件后的时间
    int finaltime = (int) System.currentTimeMillis();
    System.out.println(finaltime - pre);
    }
    return returnPath;
    }
    return "方法执行错误";
    }


    不好的地方就是前端页面每次点击添加一行时页面会刷新一下,先记录下来,下一步准备使用ajax+input的multiple="multiple"属性实现异步的多文件上传。


  • 相关阅读:
    如何在Blog中使用feedburner管理RSS订阅
    网络基本功(八):细说TCP滑动窗口
    JAVA三大框架的各自作用
    NHibernate与EF(Entity Framework)的区别
    程序模拟浏览器请求及会话保持-python实现
    Netbeans7.4下搭建struts2.3.16
    解决Sqlite UTF-8中文数据格式在DOS窗口下中文乱码
    Android使用xml中定义的动画效果
    Android 之Activity切换动画效果
    设置ActioinBar 的背景色以及Title的字体颜色
  • 原文地址:https://www.cnblogs.com/wanghongyun/p/9322380.html
Copyright © 2020-2023  润新知