代码学堂(uxuew.cn)提供付费解决PHP WEB开发等技术服务,如果需要请 点击加我QQ:1662935793.
>编程开发 > jsp教程 > java使用smartupload组件实现文件上传的方法

java使用smartupload组件实现文件上传的方法

jsp教程 围观1763次 更新日期:2017-06-29 17:04:27 留下足迹

本文实例讲述了java使用smartupload组件实现文件上传的方法。分享给大家供大家参考。具体分析如下:

文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,这里主要说明smartupload组件上传。

在讲解smartupload上传前,我们先来看看不使用组件是怎么完成上传的原理的?

废话不多说直接上代码:
代码如下:

  1. import java.io.*; 
  2. import java.util.*; 
  3. import javax.servlet.http.HttpServletRequest; 
  4. import org.apache.commons.fileupload.FileItem; 
  5. import org.apache.commons.fileupload.FileUploadException; 
  6. import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
  7. import org.apache.commons.fileupload.servlet.ServletFileUpload; 
  8. public class FileUploadTools { 
  9.     private HttpServletRequest request = null// 取得HttpServletRequest对象 
  10.     private List<FileItem> items = null// 保存全部的上传内容 
  11.     private Map<String, List<String>> params = new HashMap<String, List<String>>();    // 保存所有的参数 
  12.     private Map<String, FileItem> files = new HashMap<String, FileItem>(); 
  13.     private int maxSize = 3145728;                 // 默认的上传文件大小为3MB,3 * 1024 * 1024 
  14.     public FileUploadTools(HttpServletRequest request, int maxSize, 
  15.             String tempDir) throws Exception {    // 传递request对象、最大上传限制、临时保存目录 
  16.         this.request = request;                 // 接收request对象 
  17.         DiskFileItemFactory factory = new DiskFileItemFactory(); // 创建磁盘工厂 
  18.         if (tempDir != null) {                     // 判断是否需要进行临时上传目录 
  19.             factory.setRepository(new File(tempDir)); // 设置临时文件保存目录 
  20.         } 
  21.         ServletFileUpload upload = new ServletFileUpload(factory); // 创建处理工具 
  22.         if (maxSize > 0) {                        // 如果给的上传大小限制大于0,则使用新的设置 
  23.             this.maxSize = maxSize; 
  24.         } 
  25.         upload.setFileSizeMax(this.maxSize);     // 设置最大上传大小为3MB,3 * 1024 * 1024 
  26.         try { 
  27.             this.items = upload.parseRequest(request);// 接收全部内容 
  28.         } catch (FileUploadException e) { 
  29.             throw e;                             // 向上抛出异常 
  30.         } 
  31.         this.init();                             // 进行初始化操作 
  32.     } 
  33.     private void init() {                        // 初始化参数,区分普通参数或上传文件 
  34.         Iterator<FileItem> iter = this.items.iterator(); 
  35.         IPTimeStamp its = new IPTimeStamp(this.request.getRemoteAddr()) ; 
  36.         while (iter.hasNext()) {                // 依次取出每一个上传项 
  37.             FileItem item = iter.next();         // 取出每一个上传的文件 
  38.             if (item.isFormField()) {             // 判断是否是普通的文本参数 
  39.                 String name = item.getFieldName(); // 取得表单的名字 
  40.                 String value = item.getString(); // 取得表单的内容 
  41.                 List<String> temp = null;         // 保存内容 
  42.                 if (this.params.containsKey(name)) { // 判断内容是否已经存放 
  43.                     temp = this.params.get(name); // 如果存在则取出 
  44.                 } else {                        // 不存在 
  45.                     temp = new ArrayList<String>(); // 重新开辟List数组 
  46.                 } 
  47.                 temp.add(value);                 // 向List数组中设置内容 
  48.                 this.params.put(name, temp);     // 向Map中增加内容 
  49.             } else {                             // 判断是否是file组件 
  50.                 String fileName = its.getIPTimeRand() 
  51.                     + "." + item.getName().split("\.")[1]; 
  52.                 this.files.put(fileName, item); // 保存全部的上传文件 
  53.             } 
  54.         } 
  55.     } 
  56.     public String getParameter(String name) {     // 取得一个参数 
  57.         String ret = null;                         // 保存返回内容 
  58.         List<String> temp = this.params.get(name); // 从集合中取出内容 
  59.         if (temp != null) {                        // 判断是否可以根据key取出内容 
  60.             ret = temp.get(0);                     // 取出里面的内容 
  61.         } 
  62.         return ret; 
  63.     } 
  64.     public String[] getParameterValues(String name) { // 取得一组上传内容 
  65.         String ret[] = null;                     // 保存返回内容 
  66.         List<String> temp = this.params.get(name); // 根据key取出内容 
  67.         if (temp != null) {                        // 避免NullPointerException 
  68.             ret = temp.toArray(new String[] {});// 将内容变为字符串数组 
  69.         } 
  70.         return ret;                             // 变为字符串数组 
  71.     } 
  72.     public Map<String, FileItem> getUploadFiles() {// 取得全部的上传文件 
  73.         return this.files;                         // 得到全部的上传文件 
  74.     } 
  75.     public List<String> saveAll(String saveDir) throws IOException { // 保存全部文件,并返回文件名称,所有异常抛出 
  76.         List<String> names = new ArrayList<String>(); 
  77.         if (this.files.size() > 0) { 
  78.             Set<String> keys = this.files.keySet(); // 取得全部的key 
  79.             Iterator<String> iter = keys.iterator(); // 实例化Iterator对象 
  80.             File saveFile = null;                 // 定义保存的文件 
  81.             InputStream input = null;             // 定义文件的输入流,用于读取源文件 
  82.             OutputStream out = null;             // 定义文件的输出流,用于保存文件 
  83.             while (iter.hasNext()) {            // 循环取出每一个上传文件 
  84.                 FileItem item = this.files.get(iter.next()); // 依次取出每一个文件 
  85.                 String fileName = new IPTimeStamp(this.request.getRemoteAddr()) 
  86.                         .getIPTimeRand() 
  87.                         + "." + item.getName().split("\.")[1]; 
  88.                 saveFile = new File(saveDir + fileName);     // 重新拼凑出新的路径 
  89.                 names.add(fileName);            // 保存生成后的文件名称 
  90.                 try { 
  91.                     input = item.getInputStream();             // 取得InputStream 
  92.                     out = new FileOutputStream(saveFile);     // 定义输出流保存文件 
  93.                     int temp = 0;                            // 接收每一个字节 
  94.                     while ((temp = input.read()) != -1) {     // 依次读取内容 
  95.                         out.write(temp);         // 保存内容 
  96.                     } 
  97.                 } catch (IOException e) {         // 捕获异常 
  98.                     throw e;                    // 异常向上抛出 
  99.                 } finally {                     // 进行最终的关闭操作 
  100.                     try { 
  101.                         input.close();            // 关闭输入流 
  102.                         out.close();            // 关闭输出流 
  103.                     } catch (IOException e1) { 
  104.                         throw e1; 
  105.                     } 
  106.                 } 
  107.             } 
  108.         } 
  109.         return names;                            // 返回生成后的文件名称 
  110.     } 


上面代码便可以完成无组件上传。

下面开始讲解smartupload

smartupload是由www.jspsmart.com网站开发的一套上传组件包,可以轻松的实现文件的上传及下载功能,smartupload组件使用简单、可以轻松的实现上传文件类型的限制、也可以轻易的取得上传文件的名称、后缀、大小等。

smartupload本身是一个系统提供的jar包(smartupload.jar),用户直接将此包放到classpath下即可,也可以直接将此包拷贝到TOMCAT_HOMElib目录之中。

下面使用组件完成上传

单一文件上传:
代码如下:
 

  1. <html> 
  2. <head><title>smartupload组件上传</title> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> 
  4. <body> 
  5. <form action="smartupload_demo01.jsp" method="post" enctype="multipart/form-data"> 
  6.     图片<input type="file" name="pic"> 
  7.     <input type="submit" value="上传"> 
  8. </form> 
  9. </body> 
  10. </html> 


jsp代码:
 

  1. <%@ page contentType="text/html" pageEncoding="utf-8"%> 
  2. <%@ page import="com.jspsmart.upload.*" %> 
  3. <html> 
  4. <head><title>smartupload组件上传01</title></head> 
  5. <body> 
  6.  <% 
  7.     SmartUpload smart = new SmartUpload() ; 
  8.     smart.initialize(pageContext) ;    // 初始化上传操作 
  9.     smart.upload();        // 上传准备 
  10.     smart.save("upload") ;    // 文件保存 
  11.     out.print("上传成功"); 
  12. %> 
  13. </body> 
  14. </html> 


批量上传:

html文件
 

  1. <html> 
  2. <head><title>smartupload组件上传02</title> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> 
  4. <body> 
  5. <form action="smartupload_demo02.jsp" method="post" enctype="multipart/form-data"> 
  6.     图片<input type="file" name="pic1"><br> 
  7.     图片<input type="file" name="pic2"><br> 
  8.     图片<input type="file" name="pic3"><br> 
  9.     <input type="submit" value="上传"> 
  10.     <input type="reset" value="重置"> 
  11. </form> 
  12. </body> 
  13. </html> 


jsp代码
 

  1. <%@ page contentType="text/html" pageEncoding="utf-8"%> 
  2. <%@ page import="com.jspsmart.upload.*"%> 
  3. <%@ page import="com.zhou.study.*"%> 
  4. <html> 
  5. <head><title>smartupload组件上传02</title></head> 
  6. <body> 
  7. <% 
  8.     SmartUpload smart = new SmartUpload() ; 
  9.     smart.initialize(pageContext) ;    // 初始化上传操作 
  10.     smart.upload() ;            // 上传准备 
  11.     String name = smart.getRequest().getParameter("uname") ; 
  12.     IPTimeStamp its = new IPTimeStamp("192.168.1.1") ;    // 取得客户端的IP地址 
  13.     for(int x=0;x<smart.getFiles().getCount();x++){ 
  14.         String ext = smart.getFiles().getFile(x).getFileExt() ;    // 扩展名称 
  15.         String fileName = its.getIPTimeRand() + "." + ext ; 
  16.         smart.getFiles().getFile(x).saveAs(this.getServletContext().getRealPath("/")+"upload"+java.io.File.separator + fileName) ; 
  17.     } 
  18.     out.print("上传成功"); 
  19. %> 
  20. </body> 
  21. </html> 

注意:在TOMCAT_HOME/项目目录下建立upload文件夹才能正常运行!

简单上传操作上传后的文件名称是原本的文件名称。可通过工具类重命名。
希望本文所述对大家的jsp程序设计有所帮助。

转载请注明:代码学堂>编程开发 > jsp教程 > java使用smartupload组件实现文件上传的方法

喜欢 (230) or 分享 (89)
随机文章