Ajax文件上载

利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能:

步骤

  1. 导入组件并准备静态脚本

     <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.2</version>
    </dependency>

	<h1>Ajax 文件上载</h1>
<input type="file" id="file1"> <br>
<input type="file" id="file2"> <br>
<input type="button" id="upload" value="上载" > <div id="result"></div>
  1. 绑定事件到按钮

     $("upload").click(ajaxUpload);
  2. 获取文件

     var file1 = $("#file1")[0].files[0];
    var file2 = $("#file2")[0].files[0];
  3. 创建内存中的表单对象,并添加向服务器传输的数据

     //创建内存中的表单对象
    var form = new FormData(); //向其中添加要传输的数据
    form.append("userfile1", file1);
    form.append("userfile2", file2);
  4. ajax()上传对象

     $.ajax({
    url:'user/upload.do',//请求地址
    data: form, //请求参数
    type: 'POST', //请求类型
    dataType: 'json',//服务器返回的数据类型
    contentType: false,//没有设置任何内容类型头信息
    processData: false, //见jQuery_api详解
    success: function(obj){ //成功时回调函数,obj表示服务器返回的数据
    if(obj.state==0){
    $('#result').html("成功!");
    }
    }
    });
  5. Spring-MVC表现层

     @RequestMapping("/upload.do")
    @ResponseBody
    public JsonResult upload(
    MultipartFile userfile1,
    MultipartFile userfile2) throws Exception{
    //Spring MVC 中可以利用 MultipartFile
    //接收 上载的文件! 文件中的一切数据
    //都可以从 MultipartFile 对象中找到 //获取上再是原始文件名
    String file1 =
    userfile1.getOriginalFilename();
    String file2 =
    userfile2.getOriginalFilename(); System.out.println(file1);
    System.out.println(file2); //保存文件的3种方法:
    //1. transferTo(目标文件)
    // 将文件直接保存到目标文件, 可以处理大文件
    //2. userfile1.getBytes() 获取文件的全部数据
    // 将文件全部读取到内存, 适合处理小文件!!
    //3. userfile1.getInputStream()
    // 获取上载文件的流, 适合处理大文件 //保存的目标文件夹: /home/soft01/demo
    File dir = new File("D:/demo");
    dir.mkdir(); File f1 = new File(dir, file1);
    File f2 = new File(dir, file2); //第一种保存文件
    //userfile1.transferTo(f1);
    //userfile2.transferTo(f2); //第三种 利用流复制数据
    InputStream in1 = userfile1.getInputStream();
    FileOutputStream out1 =
    new FileOutputStream(f1);
    int b;
    while((b=in1.read())!=-1){
    out1.write(b);
    }
    in1.close();
    out1.close(); InputStream in2 = userfile2.getInputStream();
    FileOutputStream out2=
    new FileOutputStream(f2);
    byte[] buf= new byte[8*1024];
    int n;
    while((n=in2.read(buf))!=-1){
    out2.write(buf, 0, n);
    }
    in2.close();
    out2.close(); return new JsonResult(true);
    }

利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能的更多相关文章

  1. 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

    作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...

  2. Spring MVC Controller与jquery ajax请求处理json

    在用 spring mvc 写应用的时候发现jquery传递的[json数组对象]参数后台接收不到,多订单的处理,ajax请求: "}]}]} $.ajax({ url : url, typ ...

  3. SSM 实训笔记 -11- 使用 Spring MVC + JDBC Template 实现筛选、检索功能(maven)

    SSM 实训笔记 -11- 使用 Spring MVC + JDBC Template 实现筛选.检索功能(maven) 本篇是新建的一个数据库,新建的一个完整项目. 本篇内容: (1)使用 Spri ...

  4. 利用maven构建一个spring mvc的helloworld实例

    刚开始学习maven和spring mvc,学的云里雾里的 这里提供一个hello world实例,记录自己的学习之路 首先看maven官网的介绍 Apache Maven is a software ...

  5. 利用 FormData 对象发送 Key/Value 对的异步请求

    使用Key/Value对和FormData能够轻易地通过XMLHttpRequest指定要传递什么数据,它是一个非常强大的发送数据到服务器的方法. 基础 通常的方法是你创建一个 FormData 对象 ...

  6. Spring MVC使用commons fileupload实现文件上传功能

    通过Maven建立Spring MVC项目,引入了Spring相关jar依赖. 1.为了使用commons fileupload组件,需要在pom.xml中添加依赖: <properties&g ...

  7. Spring MVC 框架的架包分析,功能作用,优点

    由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或是软件架构师,在学习和了解一个框架的时候,首先都应该知道的是这个框架的原理和与其有关j ...

  8. spring mvc 避免IE执行AJAX时,返回JSON出现下载文件

    <!-- 避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJacksonHttpMessageConverter" c ...

  9. Spring MVC 解决无法访问静态文件和"全局异常处理"

    我们都知道,Spring MVC的请求都会去找controller控制器,若果我们页面中引入了一个外部样式,这样是没效果的, 我们引入样式的时候是通过<like href="...&q ...

随机推荐

  1. Chrome调试工具developer tool技巧

    Chrome这个浏览器赞的不能再赞了,给前端的开发调试工作带来了极大的效率提升. Chrome的简洁.快速吸引了无数人,它的启动速度.页面解析速度都很快,同时得益于Google V8的快速,Javas ...

  2. Redux源码分析之基本概念

    Redux源码分析之基本概念 Redux源码分析之createStore Redux源码分析之bindActionCreators Redux源码分析之combineReducers Redux源码分 ...

  3. 网站限制某些ip访问,仅允许某些ip…

    代码: function getIP() { return isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_ ...

  4. JAVA,JSP,Servlet获取当前工程路径-绝对路径

    在jsp和class文件中调用的相对路径不同. 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getPro ...

  5. 用于NLP的CNN架构搬运:from keras0.x to keras2.x

    本文亮点: 将用于自然语言处理的CNN架构,从keras0.3.3搬运到了keras2.x,强行练习了Sequential+Model的混合使用,具体来说,是Model里嵌套了Sequential. ...

  6. 记Angular与Django REST框架的一次合作(2):前端组件化——Angular

    注:这是这个系列的第二部分,主要集中在Angular的使用方面.之前使用过AngularJS(Angular 1.x),混在Django的模板中使用,这些页面一般完全是结果展示页.在有Django表单 ...

  7. textarea的换行符处理以及正确的在Html中显示

    个人不太喜欢在页面做过多的逻辑处理,贴出java的处理方式 /** * Html转换为TextArea文本 * @return */ public static String HtmlToText(S ...

  8. cache buffer

    //本文基本上是摘要了网络上各位大神对cache.buffer的总结,由于是800年前保存在本地,所以也已经忘了出处了.感谢各位大神. //本文对这2个概念的理解尚浅,如果愿意补充那就再好不过了.  ...

  9. 【NO.1】Jmeter-安装JDK- 配置Jmeter运行的环境 - 是使用Jmeter的前提

    本篇文档是描述:当我们遇到没有安装JDK的Windows系统的电脑.Linux系统的电脑的时候,该怎么来安装JDK. 如果你不安装JDK,那么就没办法开始使用Jmeter. JDK下载地址 http: ...

  10. ES6 浅谈let与const 块级作用域之封闭空间(闭包)

    ES6新增了 let const 命令,用来声明变量.它的用法类似于 var  ,但是所声明的变量,只在 let const 命令所在的代码块内有效.  var const 不允许重复声明 用处: 可 ...