对于java中上传,使用fileupload是很常用的做法,很多时候把判断后缀名,限制文件大小的工作放到服务器上去做,不但耗时也耗费服务器的资源。何不把这些工作直接放到客户端就去解决,uploadify就是一个不错的解决方法,官方的demo是针对php的,不过不要紧自己动手丰衣足食。好开始改造。
一、将下载的2.1.4版本的zip包解压。新建一个eclipse项目在webcontent中新建一个uploadify文件夹,将刚解压的文件全部放入这个文件夹
二、在根目录下新建一个html页面。暂且就叫index.html,代码贴一下。
<html> <head> <link id="globalheader-stylesheet" rel="stylesheet" href="uploadify/uploadify.css" type="text/css"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script type="text/javascript" src="uploadify/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="uploadify/swfobject.js"></script> <script type="text/javascript" src="uploadify/jquery.uploadify.v2.1.4.min.js"></script> <script type="text/javascript"> // <![CDATA[ $(document).ready(function() { $('#file_upload').uploadify({ 'uploader' : 'uploadify/uploadify.swf', 'script' : 'uploadify/uploadServlet.do', 'cancelImg' : 'uploadify/cancel.png', 'folder' : 'uploads', 'buttonText':'Select File...', 'auto' : true }); }); // ]]> </script> </head> <body> <input id="file_upload" type="file" name="file_upload" /> </body> </html>
脚本中script是服务器端处理上传的程序,,这里是一个servlet,用到的FileuploadTools.java在其他文章中有自己找一下。
package com.justsy.uploaddemo.servlet; import java.io.IOException; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileUploadBase; import org.apache.commons.fileupload.FileUploadException; import com.justsy.uploaddemo.util.FileUploadTools; import com.justsy.uploaddemo.util.FileUploadTools.UploadMsg; import com.justsy.uploaddemo.util.UnAllowedExtException; public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { FileUploadTools tool = new FileUploadTools(request,300 * 1024 * 1024); Map<String, UploadMsg> names = tool.saveFileRandomName(); UploadMsg msg = names.get("Filedata"); String name = msg.getName(); response.getWriter().write(name); } catch (FileUploadException e) { if(e instanceof FileUploadBase.IOFileUploadException){ // 取消上传 System.out.println("上传过程错误!!"+e.getMessage()); }else{ e.printStackTrace(); } } catch (UnAllowedExtException e) { e.printStackTrace(); } } }
注意点有几个就是,不要讲uploadify的不同几个版本混合着使用,可能就高出一些乱七八糟的问题。
checkScript是指定检测上传文件夹中是否有重名的程序地址,自己可以写一个servlet搞定,
其他的需求,可以在官方的doc中找到api,并用来解决问题,官方文档地址:http://www.uploadify.com/documentation/
进行上传处理的servlet最后要返回一个值可以是上传后文件的名称,使上传进度条可以正常的结束
三、可能使用的场景
对于一个表单中有多个上传的应用可以单独选择上传后返回上传后的名称,放在隐藏域中,最后随表单一起提交,这也是一个实现无刷新上传 的方法。
好,基本的应用就想到这么多,有其他的需求对照着api,应该也可以搞定。