關於Spring MVC上傳文件的坑

在網上搜了一下,找到很多代碼都是使用推薦使用

採用spring提供的上傳文件的方法

  org.springframework.web.multipart.commons.CommonsMultipartResolver

賦值了一下代碼直接使用

但是發現出現

Java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade 
cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest
就是在強制轉換這裏報錯

MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)getRequest();

最後改爲

MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(getRequest()); 
並刪除配置文件

<!-- 	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding">
			<value>UTF-8</value>
		</property>
		<property name="maxUploadSize">
			<value>32505856</value>上傳文件大小限制爲31M,31*1024*1024
		</property>
		<property name="maxInMemorySize">
			<value>4096</value>
		</property>
	</bean> -->
獲取文件成功

記錄一下完整的controller:

@RequestMapping(value="/{token}",method=RequestMethod.POST)
	@ResponseBody
	public void upload() throws IllegalStateException, IOException {
        //創建一個通用的多部分解析器
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(getRequest().getSession().getServletContext());
        //判斷 request 是否有文件上傳,即多部分請求
        if(multipartResolver.isMultipart(getRequest())){
            //轉換成多部分request
            /*MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)getRequest();*/
        	MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(getRequest()); 
            //取得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 fileName = "demoUpload" + file.getOriginalFilename();
                        //定義上傳路徑
                        String path = "D:/upload" + fileName;
                        File localFile = new File(path);
                        file.transferTo(localFile);
                    }
                }
                //記錄上傳該文件後的時間
                int finaltime = (int) System.currentTimeMillis();
                System.out.println(finaltime - pre);
            }
        }
    }  
完整的jsp

  <body>
        <h1>springMVC包裝類上傳文件</h1>   
    <form name="formUpload" action="days/${token }" enctype="multipart/form-data" method="post" id="test">  
        <div id="newUpload2">  
            <input type="file" name="file">  
        </div>  
        <input type="text" name="test" >
        <input type="submit" value="上傳" >  
    </form> 
  </body>





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章