当前位置:  编程技术>IT科技资讯 iis7站长之家

jquery uploadify和apache Fileupload实现异步上传文件示例

    来源: 互联网  发布时间:2014-11-06

    本文导语:  jQuery Uploadify + Apache Fileupload异步上传文件示例1、可以限制上传文件大小和类型,理论上任何类型的文件都可以上传(自己根据api配置即可);2、后台使用Apache commons-fileupload-1.3.1.jar作为上传工具包,本示例支持一次性多文件上...

jQuery Uploadify + Apache Fileupload异步上传文件示例
1、可以限制上传文件大小和类型,理论上任何类型的文件都可以上传(自己根据api配置即可);
2、后台使用Apache commons-fileupload-1.3.1.jar作为上传工具包,本示例支持一次性多文件上传;
3、文件上传目录可以任意指定,请在web.xml中配置;
Uploadify api 详见http://www.uploadify.com/documentation/

FileUploadServlet

代码如下:

package com.xiaoxing.upload;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Apache Fileupload文件上传(2014-5-3)
 *

1、如果你对本示例感兴趣并想了解更多,欢迎加入Java私塾在线学习社区(329232140)


 *

2、针对这个例子小修小改便可移植到你的实际项目中。


 */
public class FileUploadServlet extends HttpServlet {

    private static final long serialVersionUID = 7579265950932321867L;

    // 设置文件默认上传目录(如果你没有在web.xml中配置的话)
    private String uploadDir = "c:/"; // 文件上传目录
    private String tempUploadDir = "c:/"; // 文件临时存放目录(会话销毁后由监听器自动删除)

    /*
     * (non-Javadoc)
     * @see javax.servlet.GenericServlet#init()
     * 如果在web.xml中配置了文件上传目录则优先使用,判断文件目录是否存在,不存在就创建。
     */
    @Override
    public void init() throws ServletException {
        // 获取本项目所在真实硬盘目录
        String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
        path = path.substring(0, path.indexOf("WEB-INF"));
        // 判断目标是否存在,不存在就建立
        String uploadDir = path.concat(this.getInitParameter("uploadDir"));
        String tempUploadDir = path.concat(this.getInitParameter("tempUploadDir"));
        File f_uploadDir = new File(uploadDir);
        File f_tempUploadDir = new File(tempUploadDir);
        if (!f_uploadDir.exists()) {
            f_uploadDir.mkdirs();
        }
        if (!f_tempUploadDir.exists()) {
            f_tempUploadDir.mkdirs();
        }
        // 给变量赋值
        this.uploadDir = uploadDir;
        this.tempUploadDir = tempUploadDir;
    }

    /*
     * (non-Javadoc)
     * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     * 不接收get方式提交的数据,返回上传失败状态码。
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.setResponse(response);
        PrintWriter out = response.getWriter();
        out.print("{"error":"-1""); // 非法提交方式
    }

    /*
     * (non-Javadoc)
     * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     * 上传文件请求都是通常POST提交
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.setResponse(response); // 设置响应类型,以便前端解析
        PrintWriter out = response.getWriter();
        String result = "";
        try {
            // 检查本次是否一个文件上传请求
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            if (isMultipart) {
                DiskFileItemFactory factory = new DiskFileItemFactory(); // 创建一个工厂基于磁盘的文件项
                factory.setRepository(new File(tempUploadDir)); // 配置储存库(确保安全的临时位置时)
                ServletFileUpload upload = new ServletFileUpload(factory); // 创建一个新的文件上传处理程序
                upload.setSizeMax(1024 * 1024 * 100); // 设置总体要求尺寸限制(建议前后台分别设置,因为前后台用到了不同的插件)
                List items = upload.parseRequest(request); // 解析请求
                Iterator iter = items.iterator(); // 处理上传的项目
                while (iter.hasNext()) { //如果是一次性上传多个文件,那这里会分别去保存
                    FileItem item = iter.next();
                    if (!item.isFormField()) { // 过滤表单里的非文件类型字段
                        if (!"".equals(item.getName())) { // 过滤非文件类型的input
                            String s_name = item.getName(); // 获得原始文件名
                            int position = s_name.lastIndexOf(".");
                            String s_fileType = s_name.substring(position, s_name.length()); // 获得文件后缀
                            String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
                            String s = uploadDir.concat("/").concat(date).concat("/");
                            //这里按日期分目录保存文件
                            File sf = new File(s);
                            if (!sf.exists()) {
                                sf.mkdirs();
                            }
                            String s_filePath = s.concat(UUID.randomUUID().toString()).concat(s_fileType);
                            File path = new File(s_filePath);
                            item.write(path);
                            result += s_filePath.concat(",");
                        } else {
                            result = "";
                            break;
                        }
                    }
                }
            } else {
                result = "";
            }
            String s_resultJSON = this.jointJSON(result); // 拼接返回前端JSON
            out.print(s_resultJSON);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            out.flush();
            out.close();
        }
    }

    /**
     * 拼接JSON,将保存文件的文件名和日期目录返回给前端(前端可能需要这个路径完成其他表单操作,比如将文件路径存放到数据库)
     * @param result JSON格式的字符串
     * @return
     * @throws UnsupportedEncodingException
     */
    private String jointJSON (String result) throws UnsupportedEncodingException {
        String str = "";
        if(!"".equals(result)) {
            String rs[] = result.split(",");
            StringBuffer buffer = new StringBuffer("{"rows":[");
            for (int i = 0; i < rs.length; i++) {
                String s_tmpName = rs[i];
                s_tmpName = s_tmpName.substring(uploadDir.length(), s_tmpName.length());
                buffer.append("{"name":"").append(s_tmpName).append(""},");
            }
            str = buffer.toString();
            str = str.substring(0, str.length() - 1).concat("]}");
        } else {
            str = "{"error":"-2""; //上传失败
        }
        return str;
    }

    /**
     * 设置响应类型ContentType为"application/x-json"
     * @param response
     */
    private void setResponse(HttpServletResponse response) {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json;charset=UTF-8");
        response.setHeader("cache-control", "no-cache");
    }

}

test_upload.html

代码如下:





jQuery Uploadify + Apache Fileupload异步上传文件示例(2014-5-3)




$(function() {
 $('#fileupload').uploadify({
     'method'   : 'post',
     'buttonText' : 'flash上传文件',
     'fileSizeLimit' : '1024KB',
     'fileTypeExts' : '*.gif; *.jpg; *.png',
  'swf'      : '/js/uploadify/uploadify.swf',
  'uploader' : '/upload', //这是上传图片的路径,也就是我在web.xml里配置的servlet
  'onUploadSuccess' : function(file, data, response) { //图片上传成功后返回数据在这里处理
      var ary = eval("(" + data + ")").rows;
      for(var i = 0; i < ary.length; i++) {
          $("#J_div").append("图片");
      }
     }
 });
});



 jQuery Uploadify + Apache Fileupload异步上传文件示例(2014-5-3)
 

1、可以限制上传文件大小和类型,理论上任何类型的文件都可以上传(自己根据api配置即可);


 

2、后台使用Apache commons-fileupload-1.3.1.jar作为上传工具包,本示例支持一次性多文件上传;


 

3、文件上传目录可以任意指定,请在web.xml中配置;


 

4、对于已经上传的图片没有查询到这个页面上,这部分留给你去做吧。


 

Uploadify api 详见http://www.uploadify.com/documentation/


 

*如果你对本示例感兴趣并想了解更多,欢迎加入Java私塾在线学习社区(329232140)。


 
 



web.xml

代码如下:



 
   test_upload.html
 

 
    专门用来处理上传操作的servlet
        FileUploadServlet
        com.xiaoxing.upload.FileUploadServlet
       
         文件存放的正式目录,可以自己配置
         uploadDir
         /upload/images/
       
       
         文件存放的临时目录,可以自己配置,里的文件由下面配置的监听器自动删除。
         tempUploadDir
         /upload/temp
       
   
   
        FileUploadServlet
        /upload
   

   
     临时文件资源清理,工具包自带,不用我们来写
     org.apache.commons.fileupload.servlet.FileCleanerCleanup
   



    
 
 

您可能感兴趣的文章:

  • struts+spring+hibernate+jquery实现分页功能的几个基本类介绍(异步加载)
  • jquery ajaxSubmit 异步提交的简单实现
  • Jquery 数据异步提交的小例子
  • jquery异步请求并改变页面内容的实例分析
  • 浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
  • Jquery easyui表单异步验证扩展
  • jQuery异步上传插件
  • jQuery异步验证用户名是否存在示例代码
  • 使用jquery.upload.js实现异步上传示例代码
  • jQuery异步加载数据并添加事件示例
  • 自写的jQuery异步加载数据添加事件
  • jquery的ajax异步请求接收返回json数据实例
  • 使用jQuery异步加载 JavaScript脚本解决方案
  • AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
  • Jquery Ajax解析XML数据(同步及异步调用)简单实例
  • jQuery dialog 异步调用数据(webserivce或ashx)的实现代码
  • JQuery异步加载无限下拉框级联功能实现示例
  • Jquery.Form 异步提交表单的简单实例
  • jquery淡化版banner异步图片文字效果切换图片特效
  • jQuery定时器插件 jQuery Timers应用示例
  • jquery打开dialog的简单示例
  • jQuery animate方法定位页面具体位置(示例)
  • jQuery设置input type值示例
  • jquery弹窗代码示例
  • jquery的父子兄弟节点查找示例代码
  • jquery获取第几个元素方法示例 jquery选择器
  • jquery遍历checkbox简单示例
  • jquery动态添加option示例
  • Jquery定时器的简单示例
  • JQuery获取上传文件大小(示例)
  • Jquery在指定DIV加载HTML示例代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 通过javascript库JQuery实现页面跳转功能代码
  • jQuery鼠标动画插件 jquery-ahover
  • jQuery概述,代码举例及最新版下载
  • jQuery向导插件 Jquery Wizard Plugin
  • Jquery操作html复选框checkbox:全选,全不选和反选
  • jQuery圆角插件 jQuery Corners
  • jQuery相册插件 jQuery.popeye
  • jQuery UI组件 jQuery UI
  • jQuery右键菜单插件 jQuery ContextMenu
  • jQuery分页插件 Pagination jQuery Plugin
  • jQuery日历插件 jQuery Week Calendar
  • jQuery的中文日历插件 jQuery.datePickerCn
  • jQuery实现CSS3动画效果的插件 jQuery Transit
  • jQuery的CSV插件 jQuery CSV
  • jQuery的气泡提示插件 jquery.ns_bub.js
  • jQuery气泡提示插件 jquery-rollover-tooltip
  • jQuery对话框 jQuery Modal Dialog
  • jQuery 插件 jQuery Ripples
  • 精简版的jQuery jQuery.ish
  • jQuery的OpenSocial插件 OpenSocial jQuery
  • jQuery链接插件 jquery.biggerlink


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3