zoukankan      html  css  js  c++  java
  • 使用 jQuery FileUpload 插件实现异步上传

    首先,先做两个提前准备工作 

    1.下载插件

    2.向项目导入需要的css样式和js样式

    下面,开始实现 使用 jQuery FileUpload 插件实现异步上传

    <!- jsp 页面  以添加一个学生为例子 -!>

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <html>
    <base href="<%=basePath %>">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>

    <!- 引入bootstrap样式  和 jQuery FileUpload插件的css样式 -!>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>

    <link rel="stylesheet" type="text/css" href="css/jquery.fileupload.css">


    </head>
    <body>
    <h3>添加就业学员</h3>
    <div class="container">
      <form action="student/add" style="position: relative;" method="post" enctype="multipart/form-data">
        <div>
          <label for="sName">姓名</label>
          <input style="300px;" type="test" name="sName" class="form-control" id="sName" placeholder="Plest witer your Name">
        </div>
        <div>
          <label for="age">年龄</label>
          <input style="300px;" type="test" name="age" class="form-control" id="age" placeholder="Plest witer your age">
        </div>
        <div>
          <label for="sSet">性别</label>
          <input type="radio" name="sSet" value="男" checked="checked" />男
          <input type="radio" name="sSet" value="女" />女
        </div>
        <div>
          <select name="county" style="height:38px; 300px; margin-top: 25px;">
            <option value="-1">县区</option>
            <option value="磁县">磁县</option>
            <option value="临漳">临漳</option>
            <option value="永年县">永年县</option>
            <option value="魏县">魏县</option>
            <option value="大名县">大名县</option>
          </select>
        </div>
        <div>
          <label for="address">详情地址</label>
          <input style="300px;" type="test" name="address" class="form-control" id="address" placeholder="Plest witer your address">
        </div>
        <div>
          <select name="classes" style="height:38px; 300px;margin-top: 25px;">
            <option value="-1">班级</option>
            <option value="T12">T12</option>
            <option value="T13">T13</option>
          </select>
        </div>
        <div>
          <label for="graduate">毕业时间</label>
          <input style="300px;" type="test" name="graduate" class="form-control" id="graduate" placeholder="Plest witer your address">
        </div>
        <div >
          <label for="workTime">工作时间</label>
          <input style="300px;" type="test" name="workTime" class="form-control" id="workTime" placeholder="Plest witer your address">
        </div>
        <div>
          <label for="pay">福利待遇</label>
          <input style="300px;" type="test" name="pay" class="form-control" id="pay" placeholder="Plest witer your address">
        </div>
        <div id="photo" style="position: absolute;right:600px;top:10px;150px;text-align: center;">
          <div class="imges" style="position: relative; ">
            <img src="img/NV02.jpg" class="img-responsive">
              <div id="progress" class="progress" style="position: absolute;left:0px;top:0px;height:100%;100%;opacity:.5;">
                <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style=" 0%;">
              </div>
            </div>
          </div>

          <!- 引用插件的样式  修饰上传头像的样式 -!>
          <span class="btn btn-success fileinput-button">
          <i class="glyphicon glyphicon-plus"></i>
          <span>上传头像...</span>
            <input id="fileupload" type="file" name="image" >
          </span>
        </div>

          <!- 用于表单提交 name属性 的隐藏域 -!>
          <input type="hidden" name="img" id="img_hidden">
       </form>
    </div>

       <!-引入 jQuery FileUpload插件的js样式   注意,jquery.fileupload.js 依赖于jquery.iframe-transport.js和jquery.ui.widget.js  所以三个js逗得引入-!>
       <script type="text/javascript" src="js/jquery.ui.widget.js"></script>
       <script type="text/javascript" src="js/jquery.iframe-transport.js"></script>
       <script type="text/javascript" src="js/jquery.fileupload.js"></script>
       <script type="text/javascript">
          $(function(){

            <!- 上传调用 fileupload 方法  url:文件的上传路径名称  dataType:上传格式 done:可以理解为上传时需要做什么 progressall:上传时进度条的变化   -!>

            <!- 我这里文件指 ‘学生头像’  -!>

            $("#fileupload").fileupload({

              <!- “student/upload” 指的是  控制器方法( 方法在下面可见 )  返回文件路径 -!>
              url:"student/upload",
              dataType:"json",
              done : function(e,data){

                <!- 经测试,data反回的result属性里面的url 就是文件路径名称,所以用变量获取一下 -!>
                var url = data.result.url;

                <!-设置上传之后  将上传文件替换默认文件  -!>
                $("#photo img").attr("src","img/"+url);

                <!-将文件路径赋给隐藏域,用于表单提交-!>
                $("#img_hidden").val(url);

                <!- 上传之后进度条长度为0% -!>
                $('#progress .progress-bar').css("width","0%").html("");
              },
              progressall: function (e, data) {

                <!- 固定算法算出进度条 变化的百分比  后面参数10, 表10进制 -!>
                var progress = parseInt(data.loaded / data.total * 100, 10);
                $('#progress .progress-bar').css(

                <!- 为进度条宽度赋值  将值赋给百分比 -!>
                    'width',
                  progress + '%'
                  ).html(progress + '%');
                }
              });
          })

    </script>

    </body>
    </html>

    <!- 控制器方法 student/uploa -!>

    <!- 注解成一个控制器 -!>
    @Controller
    @RequestMapping("/student")

    public class StudentController {

      <!-- 用注解方式,value指定从页面的提交地址,method指定是用表单的方式提交过来的 -->

      @RequestMapping(value="/upload",method=RequestMethod.POST)

      <!- 注解  @ResponseBody作用是带传递数据,不跳页面   因为返回键值,所以放回值 用Map-!>
      @ResponseBody

      <!--里面的参数  MultipartFile photo指文件上传的参数,与页面file类型的input的name值必须一致,HttpServletRequest request获取请求参数,File不提供request提交 -->
      public Map<String, Object> upload(MultipartFile image,HttpServletRequest request) throws Exception{
        Map<String, Object> map = new HashMap<>();

          <!- 判断,如果上传的文件内容不为空   执行以下操作 -!>
          if (!image.isEmpty()) {

            <!-  保存文件到指定的路径   这里获取的是服务器的绝对路径 -!>
            String path = request.getServletContext().getRealPath("/img");

            <!-把文件放到项目的指定地方 -!>
            File dest = new File(path + File.separator + image.getOriginalFilename());

            image.transferTo(dest);

            <!- 将植传递会页面  键为url  值为文件名称 -!>
            map.put("url", image.getOriginalFilename());
          }
        return map;
      }

    }

    <!- 另外在扩展一个知识点   提交表单的之后   Ajax支持序列化提交表单 -!>

    //拿我这个例子来说明  我要添加一个学生   subFrom 可以是你添加学生的提交按钮调用的一个函数
      function subFrom(){

        <!- #form  指提交表单form定义的id  。serialize指的是调用序列化方法-!>
        var result = $("#form").serialize();

        <!- 发送异步请求  传递参数就是序列化方法定义的变量 result -!>
        $.post("student/add",result,function(){

          
        })
      }

      以上是我的一点总结,希望可以帮助到大家 !

  • 相关阅读:
    分享——张南《从Desktop到Mobile的自动化测试实践》
    GTAC 2015将于11月10号和11号召开
    2015 Selenium大会
    最近订阅的视频
    Episode 388: Testing vs Monitoring
    中国移动测试大会 PPT 和视频
    首届中国移动互联网测试大会在北京圆满闭幕
    推荐——吴晓波频道
    移动测试会Ebay沙龙PPT
    「中国移动互联网测试大会」报名开始啦!
  • 原文地址:https://www.cnblogs.com/huazai1996/p/8350635.html
Copyright © 2011-2022 走看看