jsp+servlet上傳文件和圖片

在做上傳的時候,需要一個commons-fileupload-xxx.jar的包。


1、jsp界面中,在表單上面加上 enctype="multipart/form-data" ,確保你的提交是文件提交。

<form action="uploadServlet" enctype="multipart/form-data" method="post" >
<table >
<tr >
<td> 
<label>姓名:</label>
<input type="text" id="tname" name="tname">*
<label>手機:</label>
<input type="text" id="tphone" name="tphone">*
</td>
</tr> 
<tr >
<td>
<label>
照  片:
</label>
<input id="touxiang" name="touxiang" type="file" />*

</td>
</tr>

<tr >
<td> 
<input type="button" name="qcmoney" value="確定">
<td>
</tr>
</table>
</form>



2、創建Teacher類,用來存儲

public class Teacher implements Serializable{


private int tId;
private String tName;
private String tPhone;
private String tZhaopian; 
........
}



3、創建UploadServlet類

public class UploadServlet extends HttpServlet{

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
       request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

Teacher teacher = new Teacher();//這是一個bean類,字段有(姓名,手機,照片)

String path = null;
String fileName = null;

        // org.apache.commons.fileupload.DiskFileUpload 是一個開源包裏的。
        DiskFileUpload du = new DiskFileUpload();
        du.setSizeMax(4194304); // 設置最大文件尺寸,這裏是4MB
        du.setSizeThreshold(4096);// 設置緩存區大小 ,4 kb;
        // up 爲 /WebRoot 下的 一個目錄
        du.setRepositoryPath(this.getServletContext()
                .getRealPath("/up"));// 設置緩存目錄


        // 得到所有文件
        try {
            List list = du.parseRequest(request);
            Iterator it = list.iterator();
            while (it.hasNext()) {
                org.apache.commons.fileupload.FileItem fileItem = (FileItem) it
                        .next();

                // 是否爲表單元素。如文本框 等等。
                if (fileItem.isFormField()) {
                    String name = fileItem.getFieldName();
                
                    //通過流 用來讀取表單元素裏的內容。
                    java.io.BufferedReader br = new BufferedReader(
                               new InputStreamReader(fileItem.getInputStream()));

                    //如果還有除文件域以外的其他表單元素 就用 if()進行名字一一匹配。
                    if(name.equals("tname")){
                        String tname =  fileItem.getString("UTF-8");
                        teacher.setTName(tname);

                    }else if(name.equals("tphone")){
                    String tphone =  fileItem.getString("UTF-8");
                    teacher.setTPhone(tphone);
                    }
                    
                }
                // 文件域
                else {
                    // 獲得文件名,這個文件名包括路徑:
                    fileName = fileItem.getName();
                    int index = fileName.lastIndexOf('.');
                    fileName = fileName.substring(index);
                    fileName = this.getFileName() + fileName;
                    //文件保存位置 
                    
                    path = request.getSession().getServletContext().getRealPath("/img")+ "/" + fileName;
                    System.out.println("path="+fileName);
                    fileItem.write(new File(path));
                    
                    System.out.println("上傳成功");
                }
            }


        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        PrintWriter out = response.getWriter();


        out.flush();
        out.close();
        
}



// 以日期 獲得一個文件名。(不重複);
    public String getFileName() {
        java.util.Calendar cal = Calendar.getInstance();


        int year = cal.get(Calendar.YEAR);
        int mon = cal.get(Calendar.MONTH);
        int day = cal.get(Calendar.DATE);
        int hour = cal.get(Calendar.HOUR);
        int min = cal.get(Calendar.MINUTE);
        int sec = cal.get(Calendar.SECOND);
        int mi = cal.get(Calendar.MILLISECOND);


        return "" + year + mon + day + hour + min + sec + mi;

    }

}



4、在web.xml中進行配置servlet。


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