spring3 +commons-fileupload+uploadify 上傳文件

問題描述:

1.在Controller中解析HttpServletRequest request 的時候報空指針異常:fileList = upload.parseRequest(request); 問題;

如圖:

原因:

       在spring配置中配置了:<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

       只要註釋起來就可以了...


Controller類代碼如下:

package com.partner.core.controller;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartHttpServletRequest;

@Controller
public class FileUploadController {
    
    protected final transient Log log = LogFactory.getLog(FileUploadController.class);
    
    @RequestMapping(value ="customer/fileupload.do")
    public String fileUpload(HttpServletRequest request, HttpServletResponse response){
            
            try {
                request.setCharacterEncoding("utf-8");
            } catch (UnsupportedEncodingException e1) {
                e1.printStackTrace();
            }
            response.setContentType("text/html; charset=utf-8");
            //文件存放的目錄
            File tempDirPath =new File(request.getSession().getServletContext().getRealPath("/")+File.separator+"uploads");
            if(!tempDirPath.exists()){
                tempDirPath.mkdirs();
            }
            //創建磁盤文件工廠
            DiskFileItemFactory fac = new DiskFileItemFactory();
            
            //創建servlet文件上傳組件
            ServletFileUpload upload = new ServletFileUpload(fac);
            
            upload.setHeaderEncoding("UTF-8");
            //文件列表
            List fileList = null;    
            //解析request從而得到前臺傳過來的文件
            try {    
                fileList = upload.parseRequest(request);    
            } catch (FileUploadException ex) {    
                log.error("Parse HttpServletRequest error",ex);
                return null;    
            }
            //保存後的文件名
            String imageName = null;
            //便利從前臺得到的文件列表
            Iterator<FileItem> it = fileList.iterator();   
            while(it.hasNext()){    
                FileItem item =  it.next();   
                //如果不是普通表單域,當做文件域來處理
                if(!item.isFormField()){
                    imageName = new Date().getTime()+item.getName();
                       
                    BufferedOutputStream out = null;
                    BufferedInputStream in = null;
                    try {
                        in = new BufferedInputStream(item.getInputStream());
                        out = new BufferedOutputStream(      
                                new FileOutputStream(new File(tempDirPath+File.separator+imageName)));
                        Streams.copy(in, out, true);
                        
                    } catch (FileNotFoundException e) {
                        log.error("FileNotFoundException",e);
                    } catch (IOException e) {
                        log.error("IOException",e);
                    }finally{
                        if(in != null){
                            try {
                                in.close();
                            } catch (IOException e) {
                                log.error("inputStream close error",e);
                            }
                        }
                        if(out != null){
                            try {
                                out.close();
                            } catch (IOException e) {
                                log.error("outputSteam close error", e);
                            }
                        }
                    }
                }
            }
            PrintWriter out = null;
            try {
                out = response.getWriter();
            } catch (IOException e) {
                log.error("IOException", e);
            }
            //這個地方不能少,否則前臺得不到上傳的結果
            out.write(imageName);
            out.close();
        return null;
    }
}

JSP代碼:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
<title>uploadify-實例</title>

<link href="<%=path %>/uploadify/uploadify.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="<%=path%>/js/jquery.js"  charset="utf-8"></script>
<script type="text/javascript" src="<%=path %>/uploadify/jquery.uploadify.min.js" charset="utf-8"></script>
<script type="text/javascript">
    $(function() {
        $("#fileids").attr("value","");
        $('#uploadify').uploadify({
            'queueID'  : 'fileQueue',
            'auto'     :  false,
            'method'   : 'POST',
              'swf'      : '../uploadify/uploadify.swf',
            'uploader' : '<%=path%>/customer/fileupload.do',
            'onUploadSuccess' : function(file, data, response) {
                var content = "";
                content += "<span>"+file.name+"</span><br/>";
                $("#fileNames").append(content);
                var ids = "";
                ids = $("#fileids").val();
                $("#fileids").attr("value",ids+data+",");
            }
        });
    });
    
</script>
<style type="text/css">
.inputcss
{
    color:#333333;
    font-family: "Tahoma";
    font-size: 12px;
    border:solid 1px #CCCCCC;
}
.buttoncss
{
    color:#333333;
    font-family: "Tahoma";
    font-size: 12px;
    background-color:#FFFFFF;
    border:solid 1px #CCCCCC;
}
</style>
</head>
<body>
    <div id="fileNames">
        
    </div>
    <table style="width: 90%;">
        <tr>
            <td style="width: 100px;">
                <input type="file" name="uploadify" id="uploadify" />
            </td>
            <td align="left">
                <a href="javascript:$('#uploadify').uploadify('upload','*')">開始上傳</a>|
                <a href="javascript:jQuery('#uploadify').uploadify('cancel', '*')">取消上傳</a>
            </td>
        </tr>
    </table>
    <div id="fileQueue" style="width: 300px;height: auto; border: 0px solid green;overflow: auto"></div>
    <input type="hidden" name="fileids" value="" id='fileids'/>
    
</body>
</html>

上傳頁面準備圖:

上傳成功:


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