文件上傳Fileupload組件

1.jsp頁面:method必須爲post,enctype="multipart/form-data"


<form action="UploadServlet" method="post" enctype="multipart/form-data">

username: <input type="text" name="username"><br>
file: <input type="file" name="file"><br>
file2: <input type="file" name="file2"><br>

<input type="submit" value="submit">


2 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.shengsiyuan.servlet.UploadServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


3.Servlet處理類:

jar包:
commons-io-2.0.1.jar
commons-fileupload-1.2.2.jar



package com.shengsiyuan.servlet;

import java.io.File;
import java.io.IOException;
import java.util.List;

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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {
//處理文件上傳 使用apache 的 FileUpload組件爲Servlet及Web應用提供上傳功能
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
/**
* 使用FileUpload上傳步驟
* FileUpload:默認上傳文件的大小爲10k
*/
//步驟一:DiskFileItemFactory 磁盤文件條目工廠
DiskFileItemFactory factory = new DiskFileItemFactory();
//upload文件夾爲WebRoot下的一個文件夾;
//path得到該文件夾的絕對路徑
String path = req.getRealPath("/upload");
//setRepository方法用於設置一個目錄:用於臨時存放上傳的文件
//如果文件比較小,會直接存在內存裏,如果比較大,則需要緩衝放在磁盤上存放(超過)
factory.setRepository(new File(path));
//設置文件大小,如果超出,文件會直接被寫到磁盤上面 (1M),如果沒超出,則存放在內存裏
factory.setSizeThreshold(1024 * 1024);
//步驟二:ServletFileUpload:創建指定處理上傳的對象;提供(parseRequest)方法去解析請求
ServletFileUpload upload = new ServletFileUpload(factory);

try {
//步驟三:FileItem:提供一序列方法
//list 爲上傳的多個文件
List<FileItem> list = (List<FileItem>) upload.parseRequest(req);
for (FileItem item : list) {
//取得form input 的name值
String name = item.getFieldName();
if (item.isFormField()) {// 這裏處理的是普通文本域 input type=text
//獲得name對應input的value值
String value = item.getString();
System.out.println(name + "=" + value);
//放到request範圍
req.setAttribute(name, value);
} else {// 這裏處理文件類型 type=file
// 獲取到上傳文件的名字
String value = item.getName();
int start = value.lastIndexOf("\\");
//處理 opera 瀏覽器會把上傳文件的路徑都取得,
String fileName = value.substring(start + 1);
req.setAttribute(name, fileName);
// 將文件寫到指定磁盤的目錄裏:路徑:path,文件名:fileName
item.write(new File(path, fileName));
// 也可由下面的方法寫到磁盤
// OutputStream os = new FileOutputStream(new File(path,
// fileName));
// InputStream is = item.getInputStream();
// byte[] buffer = new byte[400];
// int length = 0;
// while((length = is.read(buffer)) != -1)
// {
// os.write(buffer, 0, length);
// }
//
// is.close();
// os.close();
}
}

} catch (Exception ex) {
ex.printStackTrace();
}
//將請求轉發到頁面
req.getRequestDispatcher("fileUploadResult.jsp").forward(req, resp);
}
}




4 fileUploadResult.jsp


<%@ page language="java" import="java.util.*, java.io.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<body>
<%
/*
InputStream is = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String buffer = null;
while(null != (buffer = br.readLine())) {
out.print(buffer + "<br>");
}
br.close();
is.close();
*/
%>
username : ${requestScope.username }<br>
file: ${requestScope.file}<br>
file2: ${requestScope.file2 }<br>
</body>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章