程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> springmvc-用springMVC框架做文件上傳時遇到問題

springmvc-用springMVC框架做文件上傳時遇到問題

編輯:編程綜合問答
用springMVC框架做文件上傳時遇到問題

我是基於red5服務器。來用springMVC框架做文件上傳。在上傳文件時遇到錯誤。

@RequestMapping(value = "/upload.do",method = RequestMethod.POST)
public String upload(HttpServletRequest request,
        HttpServletResponse response, String string) {
    System.out.println("==================run in import");
    System.out.println("--------------" + request.getParameter("upload"));

    // 創建一個通用的多部分解析器.
    CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(
            request.getSession().getServletContext());
    // 設置編碼
    commonsMultipartResolver.setDefaultEncoding("utf-8");
    System.out.println("++++++commonsMultipartResolver.isMultipart(request) : " + commonsMultipartResolver.isMultipart(request));
    // 判斷是否有文件上傳
    if (commonsMultipartResolver.isMultipart(request)) {
        MultipartHttpServletRequest multipartRequest = commonsMultipartResolver
                .resolveMultipart(request);

        Iterator<String> iter = multipartRequest.getFileNames();
        System.out.println("+++++++++++iter = "+iter.toString());
        // iter裡面沒有值
        while (iter.hasNext()) {
            MultipartFile file = multipartRequest.getFile((String) iter.next());
            if (file != null) {
                File localFile = new File("/WEB-INF/upload"
                        + file.getOriginalFilename());
                try {
                    // file.transferTo(localFile);
                    System.out.println("=======1111111111111====");
                    file.transferTo(localFile);
                    System.out.println("====222222222222222=======");
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    // 批量上傳
    // Map<String, MultipartFile> fileMap = request.getFileMap();
    // for(Entry<String, MultipartFile> entry : fileMap.entrySet()){
    // MultipartFile file = entry.getValue();
    // try {
    // file.transferTo(new File("/WEB-INF/upload" +
    // file.getOriginalFilename()));
    // } catch(IllegalStateException e){
    // e.printStackTrace();
    // }catch (Exception e) {
    // // TODO: handle exception
    // e.printStackTrace();
    // }
    // }
    return "up";
}

}

上傳文件後,在我指定的地方沒有找到文件。測試發現
if (commonsMultipartResolver.isMultipart(request)) 這個地方獲得的是false,我這個action沒有接收到上傳的文件,但是通過System.out.println("--------------" + request.getParameter("upload"));獲取到了我上傳文件的文件名。
通過上網查找,我在配置文件中配置了MultipartResolver處理器
<!-- SpringMVC上傳文件時,需要配置MultipartResolver處理器 -->

<!-- 指定所上傳文件的總大小不能超過200KB。注意maxUploadSize屬性的限制不是針對單個文件,而是所有文件的容量之和 -->

<!-- SpringMVC在超出上傳文件限制時,會拋出org.springframework.web.multipart.MaxUploadSizeExceededException --> 
<!-- 該異常是SpringMVC在檢查上傳的文件信息時拋出來的,而且此時還沒有進入到Controller方法中 --> 
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
    <property name="exceptionMappings"> 
        <props> 
            <!-- 遇到MaxUploadSizeExceededException異常時,自動跳轉到/WEB-INF/jsp/error_fileupload.jsp頁面 --> 
            <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop> 
        </props> 
    </property> 
</bean> 

如果我在代碼最上面寫
MultipartHttpServletRequest rrr = (MultipartHttpServletRequest) request;
他就會報轉化錯誤
java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest

不知道現在是什麼問題,求解啊!

最佳回答:


SpringMVC裡面有個專門處理文件上傳的請求參數(好像叫MultilePart什麼),但是到達upload函數時,Spring自身已經吧臨時文件儲存到本地了,所以文件比較大就悲劇了,需要拷貝一次。 文件較大時,建議直接用Servlet處理,可以參考Stream 上傳插件: http://www.twinkling.cn/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved