本文實(shí)例為大家分享了JSP實(shí)現(xiàn)文件上傳功能的具體代碼,供大家參考,具體內(nèi)容如下
一、準(zhǔn)備部分
需要fileupload.jar與io.jar包共同完成。構(gòu)建完成路徑后可繼續(xù)。
資源地址

二、頁面部分
form action="UploadServlet" method="post" enctype="multipart/form-data">
學(xué)號:input type="text" name="sno"/>br/>
姓名:input type="text" name="sname"/>br/>
上傳照片:input type="file" name="spicture"/>br/>
input type="submit" value="注冊"/>
/form>
注意:
1.文件上傳必須要使用post,以避免用get方法時傳輸總量超過搜索框所能承載最大字符數(shù)。

2.必須加入enctype="multipart.form-data"字段
3.文件處需用“file”
三、Servlet部分
package webtest;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
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.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* Servlet implementation class UploadServlet
*/
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");// 請求編碼處理,傳輸時
response.setCharacterEncoding("utf-8");// 響應(yīng)編碼處理,傳輸時
response.setContentType("utf-8");// 響應(yīng)編碼處理,顯示時
boolean isMultipart = ServletFileUpload.isMultipartContent(request);// 判斷是否有entype="multipart/form-data"部分
if (isMultipart) {
try {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//設(shè)置上傳時的內(nèi)存緩沖區(qū)大小,超出時寫入臨時文件 10kb
((DiskFileItemFactory) factory).setSizeThreshold(10240);//單位byte
//設(shè)置臨時文件目錄,防止系統(tǒng)空間不足
((DiskFileItemFactory) factory).setRepository(new File(request.getSession().getServletContext().getRealPath("Uploadtemp")));//動態(tài)獲取Uploadtemp文件夾位于該項(xiàng)目中的位置
//控制上傳單個文件的最大值 20kb
upload.setSizeMax(20480);//單位byte
ListFileItem> items = upload.parseRequest(request);// 解析form中的所有請求字段,并保存在item中
IteratorFileItem> iter = items.iterator();
while (iter.hasNext()) {
// 解析時無順序,因此需根據(jù)名字查找
FileItem item = iter.next();
if (item.isFormField()) {//非文件數(shù)據(jù)
String itemName = item.getFieldName();//獲取非文件的范圍數(shù)據(jù)名
if (itemName.equals("sno")) {
int sno = -1;
sno = Integer.parseInt(item.getString("utf-8"));
}
else if (itemName.equals("sname")) {
String sname = null;
sname = item.getString("utf-8");
}
else {
System.out.println("其他字段...");
}
} else {//文件上傳
String fileName = item.getName();//獲取文件范圍數(shù)據(jù)。路徑及其名稱
//判斷文件類型
String ext = fileName.substring(fileName.indexOf(".")+1);
if(!(ext.equals("png")||ext.equals("gif")||ext.equals("jpg"))) {
System.out.println("僅支持png.gif,jpg類型文件");
return ;
}
String path = request.getSession().getServletContext().getRealPath("Upload");//動態(tài)獲取Upload文件夾位于該項(xiàng)目中的位置
File file = new File(path,fileName);
item.write(file);//定義上傳路徑,多為服務(wù)器路徑
System.out.println(fileName+"上傳成功");
}
item.delete();//刪除臨時目錄的文件
}
}
catch(FileUploadBase.SizeLimitExceededException e) {
System.out.println("最大20KB");
}
catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
注:
1.若該處標(biāo)紅且鼠標(biāo)懸停后未找到包,則可以使用"alt"+"/"組合鍵選擇下圖第一個類來導(dǎo)入。

2.由于若Upload與Uploadtemp文件存放于tomcat對應(yīng)的項(xiàng)目下,每一次通過eclipse更新代碼,會將eclipse下代碼直接覆蓋,因而兩個文件夾會直接被覆蓋掉。可以在eclipse中新建,或通過絕對/相對路徑于其他文件夾中來設(shè)置。
3.臨時文件中的數(shù)據(jù)會保留很短的時間,添加sleep讓程序休眠也許可以看到。即使無item.delete(),在整個會話完成后,臨時文件也會被刪除。
4.若報錯無法找到文件,請嘗試用瀏覽器若谷歌進(jìn)行操作,而不是用Eclipse自帶的。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- Jsp頁面實(shí)現(xiàn)文件上傳下載類代碼
- jsp中點(diǎn)擊圖片彈出文件上傳界面及預(yù)覽功能的實(shí)現(xiàn)
- jsp實(shí)現(xiàn)文件上傳下載的程序示例
- Jsp+Servlet實(shí)現(xiàn)文件上傳下載 文件上傳(一)
- AJAX和JSP實(shí)現(xiàn)的基于WEB的文件上傳的進(jìn)度控制代碼
- jsp文件上傳與下載實(shí)例代碼
- jsp中點(diǎn)擊圖片彈出文件上傳界面及實(shí)現(xiàn)預(yù)覽實(shí)例詳解
- 利用jsp+Extjs實(shí)現(xiàn)動態(tài)顯示文件上傳進(jìn)度
- jsp 文件上傳瀏覽,支持ie6,ie7,ie8
- servlet+JSP+mysql實(shí)現(xiàn)文件上傳的方法