java文件上傳Demo


說到文件上傳我們要做到:

1.引入兩個包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar

2.將form改為上傳文件模式:enctype="multipart/form-data"

3.開始編寫相關代碼

這里會用到幾個關鍵的類:磁盤文件工廠DiskFileItemFactory ; 創建servlet文件上傳類:ServletFileUpload

還有幾個重要的方法:DiskFileItemFactory類用於將以臨時文件形式保存在磁盤上的存放目錄的方法setRepository;

                             ServletFileUpload類得到表單中所有的數據,得到form表單中所有的元素方法:parseRequest

下面看具體代碼:

說明以這種方式上傳文件是保存在服務器端的!

 

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
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.io.FileUtils;


public class UploadServlet extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public UploadServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doPost(request, response);
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		DiskFileItemFactory sf= new DiskFileItemFactory();//實例化磁盤被文件列表工廠
		String path = request.getRealPath("/upload");//得到上傳文件的存放目錄
		sf.setRepository(new File(path));//設置文件存放目錄
		sf.setSizeThreshold(1024*1024);//設置文件上傳小於1M放在內存中
		String rename = "";//文件新生成的文件名
		String fileName = "";//文件原名稱
		String name = "";//普通field字段
		//從工廠得到servletupload文件上傳類
		ServletFileUpload sfu = new ServletFileUpload(sf);
		
		try {
			List<FileItem> lst = sfu.parseRequest(request);//得到request中所有的元素
			for (FileItem fileItem : lst) {
				if(fileItem.isFormField()){
					if("name".equals(fileItem.getFieldName())){
						name = fileItem.getString("UTF-8");
					}
				}else{
					//獲得文件名稱
					fileName = fileItem.getName();
					fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
					String houzhui = fileName.substring(fileName.lastIndexOf("."));
					rename = UUID.randomUUID()+houzhui;
					fileItem.write(new File(path, rename));
				}
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("普通字段"+name);
		System.out.println("文件名稱"+fileName);
		System.out.println("修改后生成的文件名稱"+rename);
		response.sendRedirect("ok.jsp");
		out.flush();
		out.close();
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}

 

 index.jsp頁面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>文件測試界面</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
  </head>
  <body>
  	<div align="center">
    <form action="UploadServlet" enctype="multipart/form-data" method="post">
    	名稱:<input name="name" /> <br>
    	圖片:<input name="img" type="file"/><br>
    	<input type="submit" value="提交" />   
    	<input type="reset" value="重置" />
    </form>
    </div>
  </body>
</html>

 ok.jsp頁面:

 <body>
   	<h1 align="center">上傳文件成功!</h1>
  </body>

 實現效果就不截圖了,有需要自己那過去用!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM