大家好,歡迎來到雄雄的小課堂,今天給大家分享的是《javaWeb中,如何通過Commons-FileUpload組件上傳文件》
前言:文件上傳大家都不陌生,在這個網際網路飛速發展的時代,共享資源已經是常態了,用戶將自己計算機中的文件上傳至伺服器端供別人下載、瀏覽,已經是web項目中最常用的功能了。比如在QQ空間中我們上傳的照片,在博客中我們上傳的工具插件,均離不開文件上傳,那麼,今天我們就來看看,javaweb中,是如何實現文件上傳的?
使用比較簡單,可以直接嵌套在jsp文件中,並且不需要編寫很多的代碼即可完成文件的上傳。除了可以上傳文件以外,還能控制上傳文件的類型以及大小,可以說是即實用又方便。
Commons-FileUpload上傳文件的步驟
給表單中添加屬性,enctype="multipart/form-data",並且表單的提交方式一定是post,不可以是get。
頁面藉助file表單來選擇上傳的文件。
在JSP文件中使用 page指令導入Cormons Filel ploaod組件所需的類。
判斷請求信息中的內容是否是multipart 類型,如果是則進行處理。
通過 FileltemnFactory工廠對象實例化ServletFil lpload對象。
調用 ServletFileUpload對象的parseRequest( )將表單中欄位解析成Fileltem對象的集合。
通過迭代依次處理每個Fileltem 對象,如果是普通欄位,通過getSring( )方法得到相應表 單字符的值,該值與表單欄位中的^name" 屬性對應。如果是文件欄位,則通過File的構造方法構建一個指定路徑名和文件名的文件,並通過Flele對象的wie)方法將上傳文件的內容保存到文件中。
頁面fileUpload.jsp的代碼:
<body>
文件上傳:
<form action="doFile.jsp" method="post" enctype="multipart/form-data" >
姓名:<input type="text" name="name"/>
文件:<input type="file" name="fname"/>
<input type="submit" value="上傳"/>
</form>
</body>
處理業務doFile.jsp的代碼:
<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.FileItemFactory"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'doFile.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String uploadName = ""; //上傳的文件名
String fileName = ""; //表單裡面name的值
//請求信息中是否是multipart類型
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
//上傳文件的存儲路徑
String uploadPath = request.getSession().getServletContext().getRealPath("upload/");
if(isMultipart){
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//解析所有的form表單裡面的文件
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iter = items.iterator();
while(iter.hasNext()){ //一次處理每個文件
FileItem item = (FileItem)iter.next();
if(item.isFormField()){ //普通表單
fileName = item.getFieldName(); //表單欄位的name屬性值
if(fileName.equals("name")){
out.print(item.getString("utf-8")+"上傳了文件<br/>");
}
}else{
//文件表單
String fName = item.getName();
if(fName!=null&&!fName.equals("")){
File fullFile = new File(item.getName());
File saveFile = new File(uploadPath,fullFile.getName());
item.write(saveFile);
uploadName= fullFile.getName();
out.print("上傳成功之後的文件名是:"+uploadName);
}
}
}
}
%>
</body>
</html>
運行結果如下: