swfupload文件上传组件 服务端用servlet配置教程
swfupload是个不错的上传组件,可以实现无刷新上传图片,并返回自己想要的数据,今天写了一个用java servlet来作为服务端接收客户端文件,自己在项目中也有使用,功能是实现远程上传文件并返回上传后在服务端的文件路径。
1,在官网下载swfupload,地址:http://demo.swfupload.org,
2,编写上传页面(这里的上传页面完全是从官网整过来的),并在下载的文件中找到以下html代码中的js文件并并入,(我下载的包中没有default.css文件,以下css也是我是官网copy过来的,里面用到一个按钮的样式,包括图片,如果不想自己写也可以先整过来),部分详情看页面注释的几个函数。
public class UploadImg extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("upload file begin");//接收参数StringBuffer path=new StringBuffer("/uploadfiles/");String user = request.getParameter("user");String product = request.getParameter("p");if(null == user){System.out.println("用户为空");return;}if(null == product){System.out.println("产品为空");return;}if(product.equals("x")){path.append("xiaoxuntong/"+user);}else{System.out.println("当前没有该产品");return;}String realpath = request.getSession().getServletContext().getRealPath(path.toString());System.out.println("_________path:"+realpath);List<FileEntity> fileList;fileList = (List)request.getAttribute("fileList");if(fileList==null)fileList = new ArrayList<FileEntity>();//接收上传文件String uploadSign = request.getParameter("upload"); uploadSign = "1"; //上传操作 if(null != uploadSign && !"".equals(uploadSign)){ FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); //upload.setHeaderEncoding("UTF-8"); try{ List items = upload.parseRequest(request); if(null != items){ Iterator itr = items.iterator(); int i = 0; while(itr.hasNext()){ FileItem item = (FileItem)itr.next(); FileEntity file = new FileEntity();// if(item.isFormField()){ continue; }else{ //可修改上传后的文件命名格式 SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddkkmmss");//以当前精确到秒的日期为上传的文件的文件名 SimpleDateFormat sdd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String type = item.getName().split("\\.")[1];//获取文件类型 System.out.println("文件名称:"+item.getName()); System.out.println("从GBK转到UTF-8输出:"+new String(item.getName().getBytes("GBK"),"UTF-8")); String fileName=sdf.format(new Date())+"."+type; File savedFile = new File(realpath,fileName); File luFile = new File(realpath); if(!luFile.exists())luFile.mkdirs(); //把文件放到列表中,在前台显示 System.out.println("服务器上对应的文件名称:"+sdf.format(new Date())+"."+type); System.out.println("完整路径:"+realpath+"/"+sdf.format(new Date())+"."+type); file.setId(sdf.format(new Date())); file.setDate(sdd.format(new Date())); file.setFilename(fileName); file.setFilepath(realpath+"/"+sdf.format(new Date())+"."+type); file.setFilesize(item.getSize()+""); file.setFiletype(type); file.setMark("0"); fileList.add(file); item.write(savedFile); } } } }catch(Exception e){ e.printStackTrace(); } }response.setContentType("text/html");response.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();if(fileList!=null){for(int i=0;i<fileList.size();i++){FileEntity file = (FileEntity)fileList.get(i); //输出文件的绝对路径 out.println(request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/"+request.getContextPath()+path.toString()+"/"+file.getFilename());}}}
结束!