servlet 用組件上傳文件

簡單的上傳圖片

1.在index.jsp文件中的body之間加


   	<form action="/Test/servlet/RegisterServlet" method="post" enctype="multipart/form-data">
   		<br>
   		頭像:<input type="file" name="userHead"> 
   		<br>
   		<input type="submit" value="提交">
   	</form>

2.在Test項目中創建servlet類命名爲 RegisterServlet  

在servlet文件中doPost方法中加

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		//保存路徑
		String Path= null;
		//判斷請求消息中的內容是否是“multipart/form-data”類型
		boolean multipart = ServletFileUpload.isMultipartContent(request);
		if (multipart) {
		   FileItemFactory factory = new DiskFileItemFactory();
		   ServletFileUpload upload = new ServletFileUpload(factory);		   
		   try {
			  List<FileItem> fileItems = upload.parseRequest(request);
			  //將圖片保存到指定文件夾下
			   File userHead = uploadHead(fileItems, "userHead");
			   if(userHead!=null && userHead.exists())
			   {
				    String fullPath=userHead.getPath();
					String[] paths=fullPath.split("/");
					String fileName=paths[paths.length-1];
					//拼出網絡路徑
					Path= SystemConfig.API_BASE_URL_HEAD+fileName;
			   }
		   }catch (FileUploadException e) {
			   e.printStackTrace();
		   }
		}
		//直接在網頁中打印圖片
//		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
//		out.println("<HTML>");
//		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
//		out.println("  <BODY>");
//		out.println(" <img src=\""+Path+"\"> ");
//		out.println("  </BODY>");
//		out.println("</HTML>");
//		out.flush();
//		out.close();
	}

3.將圖片保存到指定文件夾

 把方法加到RegisterServlet類中

	public File uploadHead(List<FileItem> items, String name) {
		for (FileItem item : items) {
			if (!item.isFormField() && name.equals(item.getFieldName())) {
				NameValuePair pair = FileHelper.getTempFile(item.getName());
				File file = new File(pair.getKey());
				if (!file.exists()) {
					try {
						file.createNewFile();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				try {
					item.write(file);
				} catch (Exception e) {
					e.printStackTrace();
				}

				return file;
			}
		}
		return null;
	}

4.定義路徑宏定義   SystemConfig類中

public class SystemConfig {
	public static final String API_BASE_URL_HEAD="http://127.0.0.1:8080/Test/img/";//圖片的訪問地址
	public static final String API_BASE_PATH_HEAD="/Users/ty/Desktop/apache-tomcat-7.0.50/webapps/Test/img/";//要存儲的路徑
}

圖片一定要放到tomcat下相應項目的文件夾下(不然會訪問不到!)

5.FileHelper.java文件  

public class FileHelper {


	public static NameValuePair getTempFile(String name) {

		//String path = System.currentTimeMillis() + "." + getEndWith(name);
		String path=getFileShortName(name);
		
		String key = SystemConfig.API_BASE_PATH_HEAD + path;

		return new NameValuePair(key, path);
	}
	public static String getEndWith(String fileName) {
		int i = fileName.lastIndexOf(".");
		if (i >= 0) {
			return fileName.substring(i + 1, fileName.length());
		}
		return "";
	}
	public static String getFileShortName(String fileName)
	{
		String[] strs=fileName.split("/");
		return strs[strs.length-1];
	}

}
6.NameValuePair.java文件
public class NameValuePair {

	private String key;
	private String value;

	public NameValuePair(String key, String value) {
		this.key = key;
		this.value = value;
	}
	
	public String getKey(){
		return key;
	}
	
	public String getValue(){
		return value;
	}
	
	public String toString(){
		return "key="+key+";value="+value;
	}

}

7.一定要加入文件上傳組件


8.看在指定的文件夾中是否有    所傳的文件或圖片

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