Uploadify+MultipartFile实现文件上传

一.form表单(截选)

<table id="myTable" border="0" cellspacing="0" cellpadding="0">    
            <tr id='myTr'> 
                <td class="label">合同附件:</td>
                <td style="padding:0" width="23%"><input class="k-textbox" value="附件名称" readonly></td>
                <td style="padding:0" width="18%"><input class="k-textbox" value="附件类型" readonly></td>
                <td style="padding:0" width="18%"><input class="k-textbox" value="附件大小" readonly></td>
                <td style="padding:0" width="18%"><input class="k-textbox" value="操作" readonly></td>
                <td style="padding:0" width="8%"></td>
            </tr>

 </table>

=================================================================================

二.js方法

 //设置上传数据的附加参数
        var fileId = $("#fileId").val();
        $("#file_upload").uploadify({
            'buttonText'      : '上传图片',                                                  //按钮图标文字
            'swf'              : '$!{rc.contextPath}/assets/js/upload/uploadify.swf',    //上传图片的按钮(浏览)
            'fileObjName'      : 'files',                                                 //上传的文件对象名,与后台所传参数名保持一致
            'queueID'          : 'uploadfileQueue',                                        //显示图片上传进度的div
            'fileTypeExts'    : '*.gif; *.jpg; *.png',                                    //文件后缀限制 默认:'*.*'  
            'auto'              : true,                                                    //选取图片后自动上传
            'multi'              : true,                                                    //图片可多选
            'uploader'          : "$!{rc.contextPath}/contract/uploadfiles?fileId="+fileId,                //上传图片的请求路径
            
            //选择文件的回调函数
            'onSelect'          : function(file) {
            },
            
            //载入时触发,隐藏上传进度条
            'onInit'          : function() {                                            
                $("#uploadfileQueue").hide();
            },
            
            //上传成功的回调函数(file:文件信息,data:controller返回的信息,response:有响应返回true)
            'onUploadSuccess' : function(file,data,response){
                //notify("上传图片成功!","warn");
                //controller返回的信息为图片储存时用的名字,responseBody给其加了双引号,需去掉
                data = data.replace(new RegExp('\"','g'),'');
                //存储用的名字
                var realName = data;
                //图片上传成功后显示上传的图片信息
                var mytr  = '<tr>'; 
                    mytr +=         '<td style="padding:0"></td>';
                    mytr +=         '<td style="padding:0"><input class="k-textbox" value='+file.name+' readonly></td>';
                    mytr +=         '<td style="padding:0"><input class="k-textbox" value='+(file.type).substring(1)+' readonly></td>';
                    mytr +=         '<td style="padding:0"><input class="k-textbox" value='+parseInt(file.size/1024)+'KB readonly>';
                    mytr +=         '<input type="hidden" value='+realName+'></td>';
                    mytr +=         '<td style="padding:0" οnclick="fClear(this);"><input class="k-textbox" type="button" value="移除"  style="text-align:left;color:blue;cursor:pointer;" readonly></td>';
                    mytr += '</tr>';
                $("#myTr").after(mytr);
            }
       });

----------------------------------------------------------------------------------------------------------------------------------------------

//移除操作
    function fClear(e){
        //获取需要删除的tr
        var $tr = $(e).closest("tr");
        //删除tr
        $tr.remove();
        //获取需要删除的图片存储名
        var $realName = $tr.find('input')[3].value;
        //删除图片的请求
        $.post("$!{rc.contextPath}/contract/removeFiles",{realName:$realName},function(data){
            //notify(data,"warn");
        },"json");
    }
    
    //将已有附件添加到表单
    function addtr(){
        #foreach($file in $files)
            var name = "$!{file.name}";
            var type = "$!{file.type}";
            var size = "$!{file.fSize}";
            var realName = "$!{file.realName}";
            var mytr  = '<tr>'; 
                mytr +=         '<td style="padding:0"></td>';
                mytr +=         '<td style="padding:0"><input class="k-textbox" value='+name+' readonly></td>';
                mytr +=         '<td style="padding:0"><input class="k-textbox" value='+type+' readonly></td>';
                mytr +=         '<td style="padding:0"><input class="k-textbox" value='+size+' readonly>';
                mytr +=         '<input type="hidden" value='+realName+'></td>';
                mytr +=         '<td style="padding:0" οnclick="fClear(this);"><input class="k-textbox" type="button" value="移除" style="text-align:left;color:blue;cursor:pointer;" readonly></td>';
                mytr += '</tr>';
            $("#myTr").after(mytr);
        #end
    }

 

三.controller

/**
     * 上传文件
     * @param file 文件
     * @param request  
     * @param fileId 文件的id 
     * @return
     */
    @ResponseBody
    @RequestMapping(value="/uploadfiles",method = RequestMethod.POST)
    public String upload(@RequestParam("files") MultipartFile[] file,HttpServletRequest request,String fileId){
        //设置文件存储位置
        String path = "C:\\files";
        //String realPath = request.getSession().getServletContext().getRealPath("/uploadfiles");        
        File pathFile = new File(path);
        //文件夹不存在则创建文件夹
        if (!pathFile.exists()) {
          pathFile.mkdirs();
        }        
        //图片存储名
        String realName = null;
        for (MultipartFile f : file) {
            try {
                //解决上传中文图片为乱码的问题
                String name = new String(f.getOriginalFilename().getBytes("ISO-8859-1"),"UTF-8");
                //通过uuid为文件产生一个唯一的名字防止相同名称的文件覆盖
                String type = name.substring(name.lastIndexOf("."));
                realName = UUID.randomUUID()+type;
                type = name.substring(name.lastIndexOf(".")+1);
                String size = (f.getSize()/1024)+"KB";                
                
                //将文件copy上传到服务器
                f.transferTo(new File(path + "/" + realName));
                MyFile myFile= new MyFile(name,realName,type,size,fileId);
                fileService.saveFiles(myFile);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return realName;
    }
    
    /**
     * 移除文件操作
     * @param name
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value="/removeFiles",method=RequestMethod.POST)
    public String removeFiles(String realName,HttpServletRequest request){
        //获取文件存储位置
        //String realPath = request.getSession().getServletContext().getRealPath("/uploadfiles");
        String path = "C:\\files";
        //在数据库中删除对应附件信息
        fileService.deleteByRealName(realName);
        File myFile = new File(path+"/"+realName);  
        //判断目录或文件是否存在  
        if (!myFile.exists()) { //不存在返回 false  
            return "文件不存在!"; 
        } else {  
            // 判断是否为文件  
            if (myFile.isFile()&& myFile.exists()) {//路径为文件且不为空则进行删除  
                if(myFile.delete()){
                    return "删除成功!";
                }else{
                    return "删除失败!";
                }
            } else {// 为目录时  
                return "文件不存在!";  
            }  
        }  
    }

转载于:https://my.oschina.net/langgege/blog/736614

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值