SmartUpload文件上传组件的使用教程
?
在項目中使用SmartUpload組件可以進行文件的上傳和下載操作
使用步驟
1.導入jar包,進行build path操作
2.編寫文件上傳頁面,代碼如下
<form action="smartupload.jsp" method="post" enctype="multipart/form-data">
???請選擇要上傳的文件:<input type="file"?name="pic">
???<input type="submit" ?value="上傳">
??</form>
3.建立upload文件夾,文件夾在web跟目錄下:
4.實例化SmartUpload對象:
5.初始化上傳操作;
6.準備上傳
7.保存文件
代碼如下:
<%
//1.實例化SmartUpload對象
SmartUpload smart=new SmartUpload();
//2.初始化上傳操作
smart.initialize(pageContext);
//3.上傳準備
smart.upload();
//保存文件
smart.save("upload");
%>
單是現在出現一個問題,表單使用enctype="multipart/form-data"進行了二進制的封裝,無法使用request.getParameter()方法獲取值了,而是二進制的byte流了.
上傳頁面代碼如下:
?<form action="smartupload.jsp" method="post" enctype="multipart/form-data">
???姓名:<input type="text" name="uname"><br/>
???
照片:<input type="file" name="pic"><br/>
???<input type="submit" ?value="上傳">
???</form>
處理請求頁面的代碼如下:
<%
//1.實例化SmartUpload對象
SmartUpload smart=new SmartUpload();
//2.初始化上傳操作
smart.initialize(pageContext);
//3.上傳準備
smart.upload();
//保存文件
smart.save("upload");
?
request.setCharacterEncoding("UTF-8");
%>
<%="姓名是"+request.getParameter("uname") %>
使用傳統的request.getParameter("uname") 已經無法獲取到用戶輸入的信息類.
?
這個時候如果想要獲取表單中的請求值,只有使用SmartUpload中的方法getRequest.getParameter()方法進行獲取
處理頁面代碼如下:
<%
//1.實例化SmartUpload對象
SmartUpload smart=new SmartUpload();
//2.初始化上傳操作
smart.initialize(pageContext);
//3.上傳準備
smart.upload();
//保存文件
smart.save("upload");
String name=smart.getRequest().getParameter("uname");
name=new String(name.getBytes(),"UTF-8");
%>
<%="姓名是"+name %>
?
但是現在發現另一個問題,我們多次上傳一個文件,我們的文件夾里面始終就保存了一個,文件本身的覆蓋導致的,
解決方法,為我們上傳的文件自動命名
1.IP+時間戳+三位隨機數
建立一個類,專門完成文件自動命名
處理文件保存頁面的代碼如下:
<%
?
//1.實例化SmartUpload對象
SmartUpload smart=new SmartUpload();
//2.初始化上傳操作
smart.initialize(pageContext);
//3.上傳準備
smart.upload();
//獲取客戶端的 IP地址
String ip=request.getRemoteAddr();
/*IpTimeStamp是自己定義的一個類,類
中有一個獲得(IP+時間戳+三位隨機數)字符串的方法*/
IpTimeStamp its=new IpTimeStamp(ip);
/*獲取文件的擴展名.smart.getFiles()是獲取我們上傳的多
個文件,getFile(0).這里面的0是下標getFileExt()是獲取文件的擴展名*/
String ext =smart.getFiles().getFile(0).getFileExt();
//拼接文件名稱
String fileName=its.getIpTimeRand()+"."+ext;
//java.io.File.separator是系統分隔符,win7是"\"?這是將文件保存為什么名字
smart.getFiles().getFile(0).saveAs(this.getServletContext().getRealPath("/")+"upload"+java.io.File.separator+fileName);
String name=smart.getRequest().getParameter("uname");
name=new String(name.getBytes(),"UTF-8");
//保存文件
smart.save("upload");
%>
<%="姓名是"+name %>
如果想要限制用戶上傳文件的擴展名
假如我們一次性上傳多個文件,可以使用getFiles()來獲取我們上傳的文件getFiles()方法返回的是一個數組
smart.getFiles().getFile(0).getFileName()//獲取文件名
//matchs()是String的方法,用來匹配正則表達式
通過smart.getFiles().getFile(0).getFileName().matches(“^\\w+.(jpg|gif)$”) 來對上傳的文件進行驗證,后綴匹配,form表單才能提交.
文件的批量上傳:
需要用到smart的方法,getCount();來獲取上傳來多少個文件
例如:smart.getFiles().getCount(),來獲取批量上傳的文件數量.再使用for循環來對文件進行重命名和保存的操作
?
總結
以上是生活随笔為你收集整理的SmartUpload文件上传组件的使用教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美征信巨头Equifax因Struts漏
- 下一篇: angular教程