天天看點

javaWeb 檔案上傳功能

首先要下載下傳兩個jar包,點選我的網盤位址即可下載下傳
           
http://pan.baidu.com/s/1o7C5iP0
           
</pre><pre name="code" class="java">比較重點的幾個類:FileItem,<span style="font-family: Arial, Helvetica, sans-serif;">servletFileUpload,</span><pre name="code" class="java">FileItemFactory
           
下面是具體代碼
           
不但可以傳文本,還可以傳各種其他的檔案
           
<pre name="code" class="java">package com.xyp.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class UploadServlet
 */
@WebServlet(value="/UploadServlet")
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UploadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");//設定編碼
		response.getWriter().println("請以post方式上傳檔案");//輸出資訊
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	@SuppressWarnings("unchecked") //消除unchecked warning
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");//設定response編碼
		response.setContentType("text/html");//設定response輸出類型
		File file1 = null,file2 = null;
		String description1 = null,description2 = null;
		PrintWriter out = response.getWriter();
		FileItemFactory factory = new DiskFileItemFactory();
           
<span style="white-space:pre">		</span>//建立FileItem工廠,可以設定緩存在記憶體或者緩存在硬碟
		ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
           
<span style="white-space:pre">		</span>//設定servletFileUpload使用剛才建立的FileItem工廠
		try {
			List<FileItem> list=servletFileUpload.parseRequest(request);//将結果放置在List中,<span style="font-family: Arial, Helvetica, sans-serif;">解析request</span>
			out.println("周遊所有的FileItem...<br/>");
			for(FileItem fileItem:list){	//周遊所有的FileItem
           
<span style="white-space:pre">				</span>//打出所有上傳的标簽的name屬性值
				System.out.println(fileItem.getFieldName());
				//擷取所有fileitem是檔案的檔案名
				String str = new String(fileItem.getName());
				if(fileItem.isFormField()){	//如果是文本域
					if("description1".equals(fileItem.getFieldName())){//如果是該參數
						out.println("周遊到 description1...<br/>");
						description1 = new String(fileItem.getString().getBytes(),"UTF-8");
					}
					if("description2".equals(fileItem.getFieldName())){//如果是該參數
						out.println("周遊到 description2...<br/>");
						description2 = new String(fileItem.getString().getBytes(),"UTF-8");
					}
				}else{	//否則為檔案域
					if("file1".equals(fileItem.getFieldName())&&!"".equals(str)){<span style="font-family: Arial, Helvetica, sans-serif;">//如果name=file1,并且檔案名不為空字元串</span>
					File remoteFile= new File(new String(fileItem.getName().getBytes(),"UTF-8"));
					out.println("周遊到file1...<br/>");
					out.println("用戶端檔案位置:"+remoteFile.getAbsolutePath()+"<br/>");
					//服務端檔案,放在upload檔案夾下
					file1 = new File(this.getServletContext().getRealPath("attachment"),remoteFile.getName());<span style="font-family: Arial, Helvetica, sans-serif;">//建立file執行個體</span>
					file1.getParentFile().mkdirs();//建立檔案夾路徑
					file1.createNewFile();//建立新檔案
					InputStream ins = fileItem.getInputStream();//FileItem的内容
					OutputStream ous = new FileOutputStream(file1);//輸出到檔案中
								try {
									byte[] buffer = new byte[1024];//位元組緩存
									int len = 0;//實際緩存長度
									while((len=ins.read(buffer))>-1){//循環讀入緩存
										ous.write(buffer,0,len);
										//ous.write(buffer);
										out.println("已儲存檔案"+file1.getAbsolutePath()+"<br/>");
									}
								}finally{
									ous.close();
									ins.close();
								}
							}
					if("file2".equals(fileItem.getFieldName())&&!"".equals(str)){//如果name=file2,并且檔案名不為空字元串
						File remoteFile= new File(new String(fileItem.getName().getBytes(),"UTF-8"));
						out.println("周遊到file2...<br/>");
						out.println("用戶端檔案位置:"+remoteFile.getAbsolutePath()+"<br/>");
						//服務端檔案,放在upload檔案夾下
						file2 = new File(this.getServletContext().getRealPath("attachment"),remoteFile.getName());//建立file執行個體
						file2.getParentFile().mkdirs();//建立檔案夾路徑
						file2.createNewFile();//建立新檔案
						InputStream ins = fileItem.getInputStream();//FileItem的内容
						OutputStream ous = new FileOutputStream(file2);//輸出到檔案中
								try {
									byte[] buffer = new byte[1024];//位元組緩存
									int len = 0;//實際緩存長度
									while((len=ins.read(buffer))>-1){//循環讀入緩存
										ous.write(buffer,0,len);
										out.println("已儲存檔案"+file1.getAbsolutePath()+"<br/>");
									}
								}finally{
									ous.close();
									ins.close();
								}
						}
				
					}
		} 
			out.println("Request解析完畢");
		}catch (Exception e) {
			e.printStackTrace();
		}
		if(file1 !=null){//輸出file1連結
			out.println("<div class='line'>");
			out.println("<div align='left' class='leftDiv'>file1:</div>");
			out.println("<div align='left' class='rightDiv'>");
			out.println("<a href='"+request.getContextPath()+"/attachm	ent/"+file1.getName()+"'target=_blank>"+file1.getName()+"</a>");
			out.println("</div>");
			out.println("</div>");
		}
		if(file2 !=null){//輸出file2連結
			out.println("<div class='line'>");
			out.println("<div align='left' class='leftDiv'>file2:</div>");
			out.println("<div align='left' class='rightDiv'>");
			out.println("<a href='"+request.getContextPath()+"/attachment/"+file2.getName()+"'target=_blank>"+file2.getName()+"</a>");
			out.println("</div>");
			out.println("</div>");
		}
		out.println("<div class='line'>");
		out.println("<div align='left' class='leftDiv'>description1:</div>");
		out.println("<div align='left' class='rightDiv'>");
		out.println(description1);
		out.println("<div class='line'>");
		out.println("<div align='left' class='leftDiv'>description2:</div>");
		out.println("<div align='left' class='rightDiv'>");
		out.println(description2);
		out.println("</div>");
		out.println("</div>");
	}

}
           

前端代碼:

<pre name="code" class="html"><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="/servlet-back/UploadServlet" method="post" enctype="multipart/form-data">
		<div align="center"><br/>
			<fieldset style="width:80%">
				<legend>上傳檔案</legend>
				<div class="line">
					<div align="left" class="lefeDiv">上傳檔案一</div>
					<div align="left" class="rightDiv">
						<input type="file" name="file1" class="text">
					</div>
				</div>
				<div class="line">
					<div align="left" class="lefeDiv">上傳檔案二</div>
					<div align="left" class="rightDiv">
						<input type="file" name="file2" class="text">
					</div>
				</div>
				<div class="line">
					<div align="left" class="lefeDiv">上傳檔案說明一</div>
					<div align="left" class="rightDiv">
						<input type="text" name="description1" class="text">
					</div>
				</div>
				<div class="line">
					<div align="left" class="lefeDiv">上傳檔案說明二</div>
					<div align="left" class="rightDiv">
						<input type="text" name="description2" class="text">
					</div>
				</div>
				<div class="line">
					<div align="left" class="lefeDiv"></div>
					<div align="left" class="rightDiv"><br/>
						<input type="submit" value="上傳檔案" class="button">
					</div>
				</div>
			</fieldset>
		</div>
	</form>
</body>
</html>