springmvc使用CommonsMultipartFile上传

maven导入jar包

<!-- 上传组件包 -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>

spring-mvc.xml配置文件中添加bean

 <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize">
			<value>-1</value>
		</property>
		<property name="defaultEncoding">
			<value>UTF-8</value>
		</property>
	</bean>
    

控制器中的方法

@RequestMapping("/fileUpload")
    public ResponseEntity<Object> fileUpload(@RequestParam("uploadfile") CommonsMultipartFile file, HttpServletRequest req) throws IOException{

        long  startTime=System.currentTimeMillis();
        if(file==null){
            logger.info("文件为空");
            return new ResponseEntity<Object>(returnFailure(),HttpStatus.OK);                       
        }else{
            //原文件名
            String originalName=file.getOriginalFilename();
            //存储用文件名
            String goalName=new Date().getTime()+file.getOriginalFilename();        
            //当前文件夹
            int folderId=(int)req.getSession().getAttribute("currentFolderId");
            //Map<String, Object> directory=mainService.getFolderInfo(folderId);
            //用户根文件夹名
            UserEntity user=(UserEntity)req.getSession().getAttribute("user");            
            String folderName=user.getFolderName();
            //当前时间
            DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String currentTime=format.format(new Date());
            //文件大小
            String fileSize=file.getSize()+"";
            //文件类型
            int typeId=FileTypeUtil.getType(originalName);
            
            Map<String, Object>map=new HashMap<String, Object>();
            map.put("fileName", originalName);
            map.put("filePath", rootDask+folderName+"/"+goalName);
            map.put("typeId", typeId);
            map.put("currentFolderId", folderId);
            map.put("fileSize", fileSize);
            map.put("currentTime", currentTime);
            
            File tempFile=new File(rootDask+folderName);
            if(!tempFile.exists()){
                tempFile.mkdir();
                logger.info("创建文件夹");
            }

            FileOutputStream os=new FileOutputStream(rootDask+folderName+"/"+goalName);
            //获取输入流 CommonsMultipartFile 中可以直接得到文件的流
                InputStream is=file.getInputStream();
                
                byte[] buffer =new byte[1024*1024];
                int bytesum = 0;
                int byteread = 0; 
                while ((byteread=is.read(buffer))!=-1)
                {
                   bytesum+=byteread;
                   os.write(buffer,0,byteread);
                   os.flush();
                } 
                os.close();
                is.close();    

               long  endTime=System.currentTimeMillis();
               logger.info(endTime-startTime+"毫秒");
               mainService.addFile(map);
        }
        
        
        return new ResponseEntity<Object>(HttpStatus.OK);
    }
html上的上传控件

<!-- 进度条 -->
                    <div id="progress" style="width:400px;display:none;">
                        <div id="progress-bar" class="progress-bar" role="progressbar" aria-valuenow="60"
                             aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
                            <span id="percent">0%</span>
                        </div>                    
                    </div>
                <!-- 隐藏的上传组件 -->
                <form id="uploadform" action="../main/fileUpload" method="post" enctype="multipart/form-data"> 
                    <input class="hide" type="file" id="hideupload" name="uploadfile" οnchange="change()"/>
                    <input class="hide" type="submit" id="submit_btn"/>
                </form>

js控制

	//file input 内容改变时触发
	function change(){
		file = document.getElementById('hideupload').files[0]; 
		$("#progress").css("display","block");
		upload();
	}
	

    //上传
    function upload(){  
        var xhr = new XMLHttpRequest();    
        var fd = new FormData();  
  
        fd.append("uploadfile", file);  
  
        //监听事件  
        xhr.upload.addEventListener("progress", uploadProgress, false);  
  
        //发送文件和表单自定义参数  
        xhr.open("POST", "../main/fileUpload",true);  
  
        xhr.send(fd);  
    }  
    //上传进度监视
    function uploadProgress(evt){  	    	
        if (evt.lengthComputable) {             	
            //evt.loaded:文件上传的大小   evt.total:文件总的大小                      
            var percentComplete = Math.round((evt.loaded) * 100 / evt.total);      
            //加载进度条,同时显示信息            
            $("#percent").html(percentComplete + '%')  
            $("#progress-bar").css("width",percentComplete*5+"px"); 
            if(percentComplete==100){
            	layer.msg('上传成功!', {icon: 1});
            	$("#progress").css("display","none");
            }
            
        }  
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值