SmartUpload 和 FileUpload 用法

SmartUpload

smartUpload 是 www.jspsmart.com 一套上传的组件包,可以轻松的实现文件的上传和下载。使用简单、可以轻松的实现上传文件类型的限制、也可以轻易的取得上传文件的名称、后缀、大小等。 它是一个系统提供 jar 包,可以直接导入 web 工程使用

如何使用

下面的用法是基于 eclipse 的 web 工程。

文件上传

  1. 导入 smartupload.jar 到 web-info/lib 目录下,并且 Build Path

  2. 实例化

    SmartUpload smartUpload = new SmartUpload()
    
  3. 初始化

    String path = "file";
    JspFactory jspFactory = JspFactory.getDefaultFactory();
    PageContext pageContext = jspFactory.getPageContext(this,request,response,null,false,0,false);
    smartUpload.initialize(pageContext);
    
  4. 准备上传

    // smartUpload 支持多个文件上传
    smartUpload.upload();
    
  5. 保存文件

    smartUpload.save(path);
    

文件下载

  1. 导入 smartupload.jar 到 web-info/lib 目录下,并且 Build Path

  2. 实例化

    SmartUpload smartUpload = new SmartUpload()
    
  3. 初始化

    // 注意这里下载文件指定的路径不能用绝对路径
    String path = "file/test.jpg";
    smartUpload.initialize(this.getServletConfig(), request, response);
    smartUpload.setContentDisposition(null);
    
  4. 下载文件

    smartUpload.downloadFile(path);
    

其他需要注意的用法

  1. form 表单

    对于 smartUpload,我们在 html 使用 form 表单时,不能简单的使用 get 方式提交,要进行封装。

    • 指定 enctype 属性
    • 控件的 name 属性要进行赋值,不能为空。

    范例:

    <!-- 用于文件上传的表单 -->
    <form action="/servlet/SmartuploadDemo01"
    	 method="post" enctype="multipart/form-data">
    		选择文件:<input type="file" name="file"><!-- 文件选择框 -->
    		<br>
    		文件描述:<input type="text" name="fileDec">
    		<br>
    		<button>提交</button>
    </form>
    
    
  2. 获得参数

    在对于 form 表单后,基于原本的用 HttpRequst 对象的 getParameter() 方法获取参数名就不管用来,这时候我们需要使用 smartUpload 提供的 Request 对象来获取参数值。

    范例:

    Request res = smartUpload.getRequest();
    String fileDec = res.getParameter("fileDec");
    

    这里可能遇到乱码问题,可以先获得字节数组,然后指定编码方式来解决乱码问题。

    byte b[] = fileDec.getBytes();
    fileDec = new String(b,"utf-8");
    
  3. 获取上传文件的 File 对象

    可以通过 getFiles() 获取 org.lxh.smart.Files 对象,通过 Files 对象的File getFile(int index) 方法来获得 org.lxh.smart.File 对象。

    范例:

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

    在获得 File 对象后,我们可以获取文件后缀 和文件名 getFileExt()getFileName()

  4. 另存为

    当文件同名时,我们可以调用 File 对象的 saveAs() 方法来实现另存。

    smartUpload.getFiles().getFile(0).saveAs(this.getServletContext().getRealPath("/file") + java.io.File.separator + newFileName);
    

FileUpload

FileUpload 是 Apache 组织提供的免费上传组件。可以从 Apache 网站下载。

相比 SmartUpload 开发。FileUpload 稍微复杂一些。而且 SmartUpload 以及多年没更新了,对比 FileUpload 在 Apache 的加持下,框架开发如 Structs2 和 SpringMVC 整合的都是 FileUpload。

如何使用

FileUpload 组件本身依赖 commons 组件,使用 FileUpload 开发,需要加载 commons 组件的 io 包,并且上传文件时候的表单控件是需要封装的,不能使用普通的表单。

步骤

需要导入 commons-fileupload-xxxx.jarcommons-io-xx.jar 两个 jar 包。

  1. 创建磁盘工程

    DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
    
  2. 创建处理工具

    ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
    
  3. 设置上传文件大小

    servletFileUpload.setFileSizeMax(1024*1024*5);//上传文件最大为5M
    
  4. 接受表单的全部内容(不管表单的参数,还是上传的文件)

    List<FileItem> fileItems = servletFileUpload.parseRequest(request);
    
  5. 判断是否为文件(使用 isFormField() ),如果是文件则保存,不是则为表单提交过的其他内容,例如参数。

    for (FileItem item : list) {
    		// isFormField() 判断是否为表单字段,当是不是字段则是文件
    		if (!item.isFormField()) {
    			String fileName = item.getName();
    			// 这里再获取原始文件名后重新命名了文件,另存到了其他文件夹。可以根据自己需求更改。
    			File file = new File(this.getServletContext().getRealPath("file")+File.separator+"11"+"."+fileName.split("\\.")[1]);
    			item.write(file);
    		}
    }
    

    其中这里的 FileItem 还要很多方法,

    • getName() 使用了获取文件名
    • getFieldName() 用来获取参数名
    • getInputStream() 获取文件的输入流
    • getSize() 获取文件大小
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值