文件上傳步驟:

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供洪山網(wǎng)站建設(shè)、洪山做網(wǎng)站、洪山網(wǎng)站設(shè)計、洪山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、洪山企業(yè)網(wǎng)站模板建站服務(wù),10多年洪山做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
1.?導(dǎo)入jar包
指毀??????common-fileupload.jar
common-io.jar??????
2.?上傳jsp頁面編輯
body
form?action="${pageContext.request.contextPath}/servlet/UploadHandleServlet"?enctype="multipart/form-data"?method="post"
上傳用戶:input?type="text"?name="username"br/
上傳文件1:input?type="file"?name="file1"br/
上傳文件2:input?type="file"?name="file2"br/
input?type="submit"?value="提交"
/form
/body????
3.?消息提示頁面(成功or失敗)?????
body
${message}
/body????
4.?處理文件上傳的servlet編寫???
import?java.io.File;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.InputStream;
import?java.util.List;
import?java.util.UUID;
import?javax.servlet.ServletException;
import?javax.servlet.http.HttpServlet;
import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
import?org.apache點抗 mons.fileupload.FileItem;
import?org.apache點抗 mons.fileupload.FileUploadBase;
import?org.apache點抗 mons.fileupload.ProgressListener;
import?org.apache點抗 mons.fileupload.disk.DiskFileItemFactory;
import?org.apache點抗 mons.fileupload.servlet.ServletFileUpload;
public?class?UploadHandleServlet?extends?HttpServlet?{
public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
//得到上傳文件的保存目錄,將上傳的文件存放于WEB-INF目錄下,不允許外界直接訪問,保證上傳文件的友皮安全
String?savePath?=?this.getServletContext().getRealPath("/WEB-INF/upload");
//上傳時生成的臨時文件保存目錄
String?tempPath?=?this.getServletContext().getRealPath("/WEB-INF/temp");
File?tmpFile?=?new?File(tempPath);
if?(!tmpFile.exists())?{
//創(chuàng)建臨時目錄
tmpFile.mkdir();
}
//消息提示
String?message?=?"";
好逗差?????????????try{
//使用Apache文件上傳組件處理文件上傳步驟:
//1、創(chuàng)建一個DiskFileItemFactory工廠
DiskFileItemFactory?factory?=?new?DiskFileItemFactory();
//設(shè)置工廠的緩沖區(qū)的大小,當(dāng)上傳的文件大小超過緩沖區(qū)的大小時,就會生成一個臨時文件存放到指定的臨時目錄當(dāng)中。
factory.setSizeThreshold(1024*100);//設(shè)置緩沖區(qū)的大小為100KB,如果不指定,那么緩沖區(qū)的大小默認(rèn)是10KB
//設(shè)置上傳時生成的臨時文件的保存目錄
factory.setRepository(tmpFile);
//2、創(chuàng)建一個文件上傳解析器
ServletFileUpload?upload?=?new?ServletFileUpload(factory);
//監(jiān)聽文件上傳進(jìn)度
upload.setProgressListener(new?ProgressListener(){
public?void?update(long?pBytesRead,?long?pContentLength,?int?arg2)?{
System.out.println("文件大小為:"?+?pContentLength?+?",當(dāng)前已處理:"?+?pBytesRead);
/**
*?文件大小為:14608,當(dāng)前已處理:4096
文件大小為:14608,當(dāng)前已處理:7367
文件大小為:14608,當(dāng)前已處理:11419
文件大小為:14608,當(dāng)前已處理:14608
*/
}
});
//解決上傳文件名的中文亂碼
upload.setHeaderEncoding("UTF-8");?
//3、判斷提交上來的數(shù)據(jù)是否是上傳表單的數(shù)據(jù)
if(!ServletFileUpload.isMultipartContent(request)){
//按照傳統(tǒng)方式獲取數(shù)據(jù)
return;
}
//設(shè)置上傳單個文件的大小的最大值,目前是設(shè)置為1024*1024字節(jié),也就是1MB
upload.setFileSizeMax(1024*1024);
//設(shè)置上傳文件總量的最大值,最大值=同時上傳的多個文件的大小的最大值的和,目前設(shè)置為10MB
upload.setSizeMax(1024*1024*10);
//4、使用ServletFileUpload解析器解析上傳數(shù)據(jù),解析結(jié)果返回的是一個ListFileItem集合,每一個FileItem對應(yīng)一個Form表單的輸入項
ListFileItem?list?=?upload.parseRequest(request);
for(FileItem?item?:?list){
//如果fileitem中封裝的是普通輸入項的數(shù)據(jù)
if(item.isFormField()){
String?name?=?item.getFieldName();
//解決普通輸入項的數(shù)據(jù)的中文亂碼問題
String?value?=?item.getString("UTF-8");
//value?=?new?String(value.getBytes("iso8859-1"),"UTF-8");
System.out.println(name?+?"="?+?value);
}else{//如果fileitem中封裝的是上傳文件
//得到上傳的文件名稱,
String?filename?=?item.getName();
System.out.println(filename);
if(filename==null?||?filename.trim().equals("")){
continue;
}
//注意:不同的瀏覽器提交的文件名是不一樣的,有些瀏覽器提交上來的文件名是帶有路徑的,如:?c:\a\b\1.txt,而有些只是單純的文件名,如:1.txt
//處理獲取到的上傳文件的文件名的路徑部分,只保留文件名部分
filename?=?filename.substring(filename.lastIndexOf("\\")+1);
//得到上傳文件的擴(kuò)展名
String?fileExtName?=?filename.substring(filename.lastIndexOf(".")+1);
//如果需要限制上傳的文件類型,那么可以通過文件的擴(kuò)展名來判斷上傳的文件類型是否合法
System.out.println("上傳的文件的擴(kuò)展名是:"+fileExtName);
//獲取item中的上傳文件的輸入流
InputStream?in?=?item.getInputStream();
//得到文件保存的名稱
String?saveFilename?=?makeFileName(filename);
//得到文件的保存目錄
String?realSavePath?=?makePath(saveFilename,?savePath);
//創(chuàng)建一個文件輸出流
FileOutputStream?out?=?new?FileOutputStream(realSavePath?+?"\\"?+?saveFilename);
//創(chuàng)建一個緩沖區(qū)
byte?buffer[]?=?new?byte[1024];
//判斷輸入流中的數(shù)據(jù)是否已經(jīng)讀完的標(biāo)識????????int?len?=?0;
//循環(huán)將輸入流讀入到緩沖區(qū)當(dāng)中,(len=in.read(buffer))0就表示in里面還有數(shù)據(jù)
while((len=in.read(buffer))0){
//使用FileOutputStream輸出流將緩沖區(qū)的數(shù)據(jù)寫入到指定的目錄(savePath?+?"\\"?+?filename)當(dāng)中
out.write(buffer,?0,?len);
}
//關(guān)閉輸入流
in.close();
//關(guān)閉輸出流
out.close();????????//刪除處理文件上傳時生成的臨時文件????????//item.delete();????????message?=?"文件上傳成功!";
}
}
}catch?(FileUploadBase.FileSizeLimitExceededException?e)?{
e.printStackTrace();
request.setAttribute("message",?"單個文件超出最大值!!!");
request.getRequestDispatcher("/message.jsp").forward(request,?response);
return;
}catch?(FileUploadBase.SizeLimitExceededException?e)?{
e.printStackTrace();
request.setAttribute("message",?"上傳文件的總的大小超出限制的最大值!!!");
request.getRequestDispatcher("/message.jsp").forward(request,?response);
return;
}catch?(Exception?e)?{
message=?"文件上傳失敗!";
e.printStackTrace();
}
request.setAttribute("message",message);
request.getRequestDispatcher("/message.jsp").forward(request,?response);
}
private?String?makeFileName(String?filename){?//2.jpg
//為防止文件覆蓋的現(xiàn)象發(fā)生,要為上傳文件產(chǎn)生一個唯一的文件名
return?UUID.randomUUID().toString()?+?"_"?+?filename;
}??
private?String?makePath(String?filename,String?savePath){
//得到文件名的hashCode的值,得到的就是filename這個字符串對象在內(nèi)存中的地址
int?hashcode?=?filename.hashCode();
int?dir1?=?hashcode0xf;?//0--15
int?dir2?=?(hashcode0xf0)4;?//0-15
//構(gòu)造新的保存目錄
String?dir?=?savePath?+?"\\"?+?dir1?+?"\\"?+?dir2;?//upload\2\3?upload\3\5
if(!file.exists()){
file.mkdirs();
}
return?dir;
}
public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
doGet(request,?response);
}
}
5.編寫web.xml文件(servlet的映射配置)???
servlet
servlet-nameUploadHandleServlet/servlet-name
servlet-classme.gacl.web.controller.UploadHandleServlet/servlet-class
/servlet
servlet-mapping
servlet-nameUploadHandleServlet/servlet-name
url-pattern/servlet/UploadHandleServlet/url-pattern
/servlet-mapping
注:?網(wǎng)上看到的,出處找不到了,望見諒!!
文章名稱:java框架文件上傳代碼 java文件傳輸框架
網(wǎng)頁地址:http://chinadenli.net/article9/dsphjih.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、品牌網(wǎng)站設(shè)計、App開發(fā)、網(wǎng)頁設(shè)計公司、虛擬主機(jī)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)