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");
            }
            
        }  
    }



發佈了38 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章