只需要寫一個上傳類UploadServlet.java,還需要兩個Jsp界面,分別負責上傳文件和輸出上傳是否成功。
還需要在根目錄下新建一個文件夾uploads,用於保存上傳後文件。
下面是上傳Servlet類源碼:
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = -2201219701121037194L;
private String savePath;
private ServletContext sc;
public void init(ServletConfig config) {
savePath = config.getInitParameter("savePath");
sc = config.getServletContext();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);// 上傳文件解析
Iterator itr = items.iterator();// 枚舉方法
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
if (item.isFormField()) {// 判斷是文件還是文本信息
System.out.println("表單參數名:" + item.getFieldName()
+ ",表單參數值:" + item.getString("UTF-8"));
} else {
if (item.getName() != null && !item.getName().equals("")) {// 判斷是否選擇了文件
System.out.println("上傳文件的大小:" + item.getSize());
System.out.println("上傳文件的類型:" + item.getContentType());
// item.getName()返回上傳文件在客戶端的完整路徑名稱
System.out.println("上傳文件的名稱:" + item.getName());
// 此時文件暫存在服務器的內存當中
File tempFile = new File(item.getName());// 構造臨時對象
File file = new File(sc.getRealPath("/") + savePath,
tempFile.getName());
// 獲取根目錄對應的真實物理路徑
item.write(file);// 保存文件在服務器的物理磁盤中
request.setAttribute("upload.message", "上傳文件成功!");// 返回上傳結果
} else {
request.setAttribute("upload.message", "沒有選擇上傳文件!");
}
}
}
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("upload.message", "上傳文件失敗!");
}
request.getRequestDispatcher("/uploadResult.jsp").forward(request,
response);
}
}
齊活