使用SmartUpload组件实现文件上传

文件上传是作JavaWeb项目中常常使用的功能,而SmartUpload是一个可无偿使用的全功能的文件上传下载组件。虽然此组件最近不多有更新,但因为其简单易用,对于通常的项目来讲仍是一个很好的选择。下面以一个具体的例子来讲明此组件的使用。 html

首先,将SmartUplaodjar文件放入项目的lib目录中。 java

而后,咱们开发上传用的JSP页面,为了简单起见,本表单中仅包含了用户上传文件的文件域和一个上传按钮。效果以下:

缓存

须要注意的是,表单中使用了文件域,则表单提交类型(method)必须为post并且添加enctype="multipart/form-data" dom

有了上传页面,下面编写处理上传的Servlet,代码以下: jsp







 

 

publicclassUploadServletextendsHttpServlet {  post

    privatestaticfinallongserialVersionUID = 1L;  this

    protectedvoiddoPost(HttpServletRequest request,  spa

           HttpServletResponse response) throwsServletException, IOException {  操作系统

       // 对象输出声明  orm

       response.setContentType("text/html;charset=utf-8"); 

       PrintWriter out = response.getWriter(); 

       // 准备上传的目录 

       String path = this.getServletContext().getRealPath("photo"); 

       File fpath = new File(path); 

       if (!fpath.exists()) { 

           fpath.mkdir(); 

       } 

       // 实例化组件 

       SmartUploadsu = newSmartUpload("utf-8"); 

       // 初始化组件 

       su.initialize(this.getServletConfig(), request, response); 

       // 上传限制 

       su.setMaxFileSize(50 * 1024); // 设置大小50K 

       su.setAllowedFilesList("gif,png,jpg"); // 设置上传类型 

       try { 

           // 上传文件 

           su.upload(); 

           // 获取上传的第一个文件 

           SmartFile file =
  su.getFiles().getFile(0);
 

           // 判断是否有文件上传,没有选择文件则提示用户 

           if (file.isMissing()) { 

              out.println("<script>alert('请选择要上传的文件!');location.href='upload.jsp';</script>"); 

              return; 

           } 

           // 按照规则准备文件名按规则 

           String fname = new Date().getTime()

                  + (newRandom().nextInt(900) + 100) + "." 

                  + file.getFileExt();

           // 把文件从缓存区转移到指定目录中 

           file.saveAs(path + "/" + fname);

           out.println("<script>alert('文件上传成功!');location.href='upload01.jsp';</script>"); 

       } catch (SecurityException e) { 

           e.printStackTrace(); 

           // 违反上传限制的异常处理 

           out.println("<script>alert('请选择合法的文件!');location.href='upload01.jsp';</script>"); 

       } catch (SmartUploadException e) { 

           e.printStackTrace(); 

           out.println("<script>alert('文件上传失败!');location.href='upload01.jsp';</script>"); 

       } 

    } 

}


 

以上代码实现了单文件上传处理,添加了注释方便阅读。其中核心就是使用了SmartFile类,这个类的主要方法以下:

1saveAs做用:将文件换名另存。

原型:

public void
saveAs(java.lang.StringdestFilePathName)

public void
saveAs(java.lang.StringdestFilePathName, intoptionSaveAs)

其中,destFilePathName是另存的文件名,optionSaveAs是另存的选项,该选项有三个值,分别是SAVEAS_PHYSICAL,SAVEAS_VIRTUALSAVEAS_AUTOSAVEAS_PHYSICAL代表以操做系统的根目录为文件根目录另存文件,SAVEAS_VIRTUAL代表以Web应用程序的根目录为文件根目录另存文件,SAVEAS_AUTO则表示让组件决定,当Web应用程序的根目录存在另存文件的目录时,它会选择SAVEAS_VIRTUAL,不然会选择SAVEAS_PHYSICAL

2isMissing

做用:这个方法用于判断用户是否选择了文件,也即对应的表单项是否有值。选择了文件时,它返回false。未选文件时,它返回true

原型:publicbooleanisMissing()

3getFieldName

做用:取HTML表单中对应于此上传文件的表单项的名字。

原型:public String getFieldName()

4getFileName

做用:取文件名(不含目录信息)

原型:public String getFileName()

5getFilePathName

做用:取文件全名(带目录)

原型:public String getFilePathName

6getFileExt

做用:取文件扩展名(后缀)

原型:public String getFileExt()

7getSize

做用:取文件长度(以字节计)

原型:publicintgetSize()

8getBinaryData

做用:取文件数据中指定位移处的一个字节,用于检测文件等处理。

原型:public byte getBinaryData(int index)。其中,index表示位移,其值在0getSize()-1之间。

上传效果以下:

 

固然,此例只实现了单文件的处理,若是须要多文件上传只须要在表单中提供多个文件域,并在servlet中循环处理便可。本文中提到的jspSmartupload组件能够在网上进行下载,资源比较多此处再也不提供下载地址。

做者:中软卓越天津ETC

相关文章
相关标签/搜索