日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

用commons-fileupload-1.2 实现文件上传

發(fā)布時(shí)間:2024/1/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用commons-fileupload-1.2 实现文件上传 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

用commons-fileupload-1.2 實(shí)現(xiàn)文件上傳(轉(zhuǎn))

先放鏈接:

轉(zhuǎn)載自:http://www.diybl.com/course/3_program/java/javashl/2008520/117162.html

前幾天搞文件上傳, Google到了Apache 的 commons-fileupload-1.2.jar 上傳組件, 研究了API然后結(jié)合Hibernate實(shí)現(xiàn)了上傳圖片
并保存到MySQL數(shù)據(jù)庫(kù). 今天重新寫(xiě)了一遍, 由于不需要保存到數(shù)據(jù)庫(kù)了, 就實(shí)現(xiàn)了保存成文件格式.

??? 我的這個(gè)FileUpload web工程源文件下載如下 : FileUpload.rar . 解壓到當(dāng)前文件夾后直接剪切到 Tomcat 主目錄下的 webapps
目錄下, 啟動(dòng) Tomcat 后在瀏覽器輸入 http://localhost:8080/FileUpload/upload.html 查看演示.

??? 我是用Eclipse 開(kāi)發(fā). 首先, 下載兩個(gè)開(kāi)發(fā)包: commons-fileupload 和 commons-io(這個(gè)在應(yīng)用commons-fileupload時(shí)會(huì)用到).
這兩個(gè)開(kāi)發(fā)包(jar文件) 在我前面提供的FileUpload 工程下的WEB-INF/lib下可以找到, 你也可以到官方下載:
到 http://commons.apache.org/downloads/download_fileupload.cgi 下載 commons-fileupload-1.2.jar
組件包 (直接下載地址: http://apache.mirror.phpchina.com/commons/fileupload/binaries/commons-fileupload-1.2-bin.zip),
到 http://commons.apache.org/downloads/download_io.cgi 下載 commons-io-1.3.2 組件包(直接下載地址:
http://apache.mirror.phpchina.com/commons/io/binaries/commons-io-1.3.2-bin.zip).

??? 啟動(dòng)Eclipse, 新建Web Project, 取名 FileUpload. 然后在WebRoot文件夾(Web根文件夾)下新建兩個(gè)文件夾(New->Folder) :
ImagesUploaded 和 ImagesUploadTemp, 分別用來(lái)存放上傳文件和上傳時(shí)的臨時(shí)文件,稍后代碼里會(huì)用到.

???? 在WebRoot 文件夾下新建文件upload.html, 用來(lái)提供上傳用的form. 源代碼如下:
???? 右擊src, 新建一個(gè)Servlet: FileUploadServlet, 路徑設(shè)為src/FileUploadServlet . 保存后WebRoot/WEB-INF/web.xml 更新為:

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>
??? <description>This is the description of my J2EE component</description>
??? <display-name>This is the display name of my J2EE component</display-name>
??? <servlet-name>FileUploadServlet</servlet-name>
??? <servlet-class>FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
??? <servlet-name>FileUploadServlet</servlet-name>
??? <url-pattern>/FileUploadServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
??? <welcome-file>upload.html</welcome-file>
</welcome-file-list>
</web-app>

??
??? 其中,我把<welcome-file-list>??? <welcome-file>index.jsp</welcome-file> </welcome-file-list> 的歡迎文件設(shè)為了upload.html,
這樣等完成后可能直接用http://localhost:8080/FileUpload/ 來(lái)訪(fǎng)問(wèn)upload.html. 不改的話(huà), 可以在http://localhost:8080/FileUpload/upload.html
頁(yè)面上傳文件.??? 在寫(xiě)FileUploadServlet 之前, 先將之前下載的commons-fileupload 和commons-io 組件包壓縮文件解壓出來(lái), 把里面的
commons-fileupload-1.2.jar (lib文件夾下) 和 commons-io-1.3.2.jar 拷到WebRoot/WEB-INF/lib 文件夾下, 以便使用它們的功能.

??? FileUploadServlet.java 的源代碼如下, 附有詳細(xì)注解:

FileUploadServlet.java import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; 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.FileUploadException; import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUploadServlet extends HttpServlet { public FileUploadServlet() { super(); } public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { final long MAX_SIZE = 3 * 1024 * 1024;// 設(shè)置上傳文件最大為 3M // 允許上傳的文件格式的列表 final String[] allowedExt = new String[] { "jpg", "jpeg", "gif", "txt","doc", "docx", "mp3", "wma", "m4a" }; response.setContentType("text/html"); // 設(shè)置字符編碼為UTF-8, 這樣支持漢字顯示 response.setCharacterEncoding("UTF-8"); // 實(shí)例化一個(gè)硬盤(pán)文件工廠(chǎng),用來(lái)配置上傳組件ServletFileUpload DiskFileItemFactory dfif = new DiskFileItemFactory(); dfif.setSizeThreshold(4096);// 設(shè)置上傳文件時(shí)用于臨時(shí)存放文件的內(nèi)存大小,這里是4K.多于的部分將臨時(shí)存在硬盤(pán) dfif.setRepository(new File(request.getRealPath("/")+ "ImagesUploadTemp"));// 設(shè)置存放臨時(shí)文件的目錄,web根目錄下的ImagesUploadTemp目錄 // 用以上工廠(chǎng)實(shí)例化上傳組件 ServletFileUpload sfu = new ServletFileUpload(dfif); // 設(shè)置最大上傳尺寸 sfu.setSizeMax(MAX_SIZE); PrintWriter out = response.getWriter(); // 從request得到 所有 上傳域的列表 List fileList = null; try {fileList = sfu.parseRequest(request); } catch (FileUploadException e) {// 處理文件尺寸過(guò)大異常if (e instanceof SizeLimitExceededException) {out.println("文件尺寸超過(guò)規(guī)定大小:" + MAX_SIZE + "字節(jié)<p />");out.println("<a href=\"upload.html\" target=\"_top\">返回</a>");return;}e.printStackTrace(); } // 沒(méi)有文件上傳 if (fileList == null || fileList.size() == 0) {out.println("請(qǐng)選擇上傳文件<p />");out.println("<a href=\"upload.html\" target=\"_top\">返回</a>");return; } // 得到所有上傳的文件 Iterator fileItr = fileList.iterator(); // 循環(huán)處理所有文件 while (fileItr.hasNext()) {FileItem fileItem = null;String path = null;long size = 0;// 得到當(dāng)前文件fileItem = (FileItem) fileItr.next();// 忽略簡(jiǎn)單form字段而不是上傳域的文件域(<input type="text" />等)if (fileItem == null || fileItem.isFormField()) {continue;}// 得到文件的完整路徑path = fileItem.getName();// 得到文件的大小size = fileItem.getSize();if ("".equals(path) || size == 0) {out.println("請(qǐng)選擇上傳文件<p />");out.println("<a href=\"upload.html\" target=\"_top\">返回</a>");return;}// 得到去除路徑的文件名String t_name = path.substring(path.lastIndexOf("\\") + 1);// 得到文件的擴(kuò)展名(無(wú)擴(kuò)展名時(shí)將得到全名)String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);// 拒絕接受規(guī)定文件格式之外的文件類(lèi)型int allowFlag = 0;int allowedExtCount = allowedExt.length;for (; allowFlag < allowedExtCount; allowFlag++) {if (allowedExt[allowFlag].equals(t_ext))break;}if (allowFlag == allowedExtCount) {out.println("請(qǐng)上傳以下類(lèi)型的文件<p />");for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)out.println("*." + allowedExt[allowFlag]+ "???");out.println("<p /><a href=\"upload.html\" target=\"_top\">返回</a>");return;}long now = System.currentTimeMillis();// 根據(jù)系統(tǒng)時(shí)間生成上傳后保存的文件名String prefix = String.valueOf(now);// 保存的最終文件完整路徑,保存在web根目錄下的ImagesUploaded目錄下String u_name = request.getRealPath("/") + "ImagesUploaded/"+ prefix + "." + t_ext;try {// 保存文件fileItem.write(new File(u_name));out.println("文件上傳成功. 已保存為: " + prefix + "." + t_ext+ " ??文件大小: " + size + "字節(jié)<p />");out.println("<a href=\"upload.html\" target=\"_top\">繼續(xù)上傳</a>");} catch (Exception e) {e.printStackTrace();} } } public void init() throws ServletException { // Put your code here } }

?

??? 保存后部署項(xiàng)目(MyEclipse下直接點(diǎn)擊Deploy J2EE...按鈕, 然后選擇Tomcat服務(wù)器). 沒(méi)有MyEclipse的話(huà), 把WebRoot 拷到
Tomcat 主目錄下的webapps 目錄下, 并重命名為 FileUpload 然后啟動(dòng)Tomcat. (或直接下載我在文章開(kāi)始提供的工程打包rar文件).
最后打開(kāi)瀏覽器, 輸入url:target="_blank" link="http://localhost:8080/FileUpload/upload.html">http://localhost:8080/FileUpload/upload.html .

總結(jié)

以上是生活随笔為你收集整理的用commons-fileupload-1.2 实现文件上传的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。