jquery ajaxfileupload异步上传插件使用详解

由于项目需求在上传头像是需要使用异步上传文件,在上传的过程中需要对文件进行校验:规则如下:宽度和高
度大于200,宽高比要小于2,大小小于2M。

我这里使用的是AjaxFileUploader这个组件,服务器使用Struts处理文件。

实例:

<form action="" id="imageForm" enctype="multipart/form-data" method="POST">
  <input type="file" name="userPhoto" id="userPhoto">
  <input type="button" value="上传" id="shangchuan">
</form>

这里需要引入两个js文件:jQuery、ajaxfileUpload

<script type="text/javascript" src="${basePath }/resource/js/plugin/jquery-1.6.min.js"></script>
<script type="text/javascript" src="${basePath }/resource/js/grzx/ajaxfileupload.js"></script>

js文件:

//上传头像
  $("#shangchuan").click(function(){
    var file = $("#userPhoto").val();
    if(file==""){
      alert("请选择上传的头像");
      return;
    }
    else{
      //判断上传的文件的格式是否正确
      var fileType = file.substring(file.lastIndexOf(".")+1);
      if(fileType!="png"&&fileType!="jpg"){
        alert("上传文件格式错误");
        return;
      }
      else{
        var url = "/symh/user/uploadPhoto_uploadPhoto.action?nowtime="+new Date().getTime();
        $.ajaxFileUpload({
          url:url,
          secureuri:false,
          fileElementId:"userPhoto",    //file的id
            dataType:"text",         //返回数据类型为文本
          success:function(data,status){
            if(data=="1"){
              alert("请上传宽度大于200像素和高度大于200像素的图片");
            }
            else if(data=="2"){
              alert("请上传宽高比不超过2的图片");
            }
            else if(data=="3"){
              alert("请上传文件大小不大于2M的图片");
            }
            else{
              $("#uploadImage").hide();
              $("#srcImg").attr("src",data);
              $("#previewImg").attr("src",data);
              $("#cutImage").show();
              $("#bigImage").val(data);
              cutImage();     //截取头像
            }
          }
        })
      }
    }
  })

后台处理程序:UploadPhotoAction.Java

public class UploadPhotoAction {
  private File userPhoto;
  private String userPhotoContentType;
  private String userPhotoFileName; 

  public File getUserPhoto() {
    return userPhoto;
  } 

  public void setUserPhoto(File userPhoto) {
    this.userPhoto = userPhoto;
  } 

  public String getUserPhotoContentType() {
    return userPhotoContentType;
  } 

  public void setUserPhotoContentType(String userPhotoContentType) {
    this.userPhotoContentType = userPhotoContentType;
  } 

  public String getUserPhotoFileName() {
    return userPhotoFileName;
  } 

  public void setUserPhotoFileName(String userPhotoFileName) {
    this.userPhotoFileName = userPhotoFileName;
  } 

  /**
   * 用户上传图像
   */
  public void uploadPhoto(){
    try {
      HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
      response.setCharacterEncoding("UTF-8"); 

      FileInputStream fis1 = new FileInputStream(getUserPhoto());     //保存文件
      FileInputStream fis2 = new FileInputStream(getUserPhoto());    //判断文件
      int i = this.checkImage(fis2);
      if(i==1){
        response.getWriter().print("1");
      }
      else if(i==2){
        response.getWriter().print("2");
      }
      else if(i==3){
        response.getWriter().print("3");
      }
      else {  //文件正确、上传
        //得到文件名
        String photoName = getPhotoName(getUserPhotoFileName()); 

        FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+photoName);
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = fis1.read(buffer))>0) {
          fos.write(buffer,0,len);
        }
        //处理文件路径,便于在前台显示
        String imagPathString = dealPath(getSavePath()+"\\"+photoName);
        response.getWriter().print(imagPathString); 

      }
    }
    catch (IOException e) {
      e.printStackTrace();
    } 

  } 

  /**
   * 重新命名头像名称:用户编号+头像后缀
   */
  public String getPhotoName(String photoName){
    //获取用户
    HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
    UserBean userBean = (UserBean) request.getSession().getAttribute("userBean"); 

    //获取文件的后缀
    String[] strings = photoName.split("\\.");
    String hz = strings[1]; 

    //构建文件名
    String fileName = userBean.getUserId()+"."+hz;
    return fileName;
  } 

  /**
   * 获取上传路径
   */
  public String getSavePath(){
    return ServletActionContext.getServletContext().getRealPath("upload/photos");
  } 

  /**
   * 判断上传的头像是否合法
   * 规则:宽度和高度大于200、宽高比小于2、大小小于2M
   * 宽度或者高度<200 返回1
   * 宽高比>2 返回2
   * 大小大于2M 返回 3
   * 正确 返回 0
   */
  public int checkImage(FileInputStream fis){
    try {
      BufferedImage image = ImageIO.read(fis);
      double width = image.getWidth();
      double height = image.getHeight();
      if(width<200||height<200){
        return 1;
      }
      else if(width/height>2){
        return 2;
      }
      else if(fis.available()/(1024*1024)>2){
        return 3;
      }
      else {
        return 0;
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    return 1;
  } 

  /**
   * 处理头像路径
   */
  public String dealPath(String path){
    String[] strings = path.split("\\\\");
    String string2 = "/";
    for (int i = strings.length-4; i < strings.length; i++) {
      if(i==strings.length-1){
        string2 = string2+strings[i];
      }
      else {
        string2 = string2+strings[i]+"/";
      } 

    }
    return string2;
  }
}

这里就介绍使用ajaxFileUpload异步上传文件。下面将介绍如何截取头像(类似于QQ上传头像)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Asp.net MVC中使用JQuery插件ajaxFileUpload上传文件

    0 ajaxFileUpload简介 ajaxFileUpload插件是一个非常简单的基于Jquery的异步上传文件的插件,使用过程中发现很多与这个同名的,基于原始版本基础之上修改过的插件,文件版本比较多,我把我自己使用的ajaxFileUpload文件上传到博客园上了,想要使用的朋友可以下载:http://xiazai.jb51.net/201611/yuanma/ajaxfileupload(jb51.net).rar. 整个插件源码不到200行,实现非常简单,大致原理就是通过js动态创建隐

  • jQuery异步上传文件插件ajaxFileUpload详细介绍

    一.ajaxFileUpload是一个异步上传文件的jQuery插件. 传一个不知道什么版本的上来,以后不用到处找了. 语法:$.ajaxFileUpload([options]) options参数说明: 1.url   上传处理程序地址. 2,fileElementId   需要上传的文件域的ID,即<input type="file">的ID. 3,secureuri 是否启用安全提交,默认为false. 4,dataType 服务器返回的数据类型.可以为xml,sc

  • jquery之ajaxfileupload异步上传插件(附工程代码)

    点我下载工程代码 由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用Jquery Ajax File Uploader这个组件下载地址:http://www.phpletter.com/download_project_version.php?version_id=6 服务器端采用struts2来处理文件上传. 所需环境: jquery.js ajaxfileupload.js struts2所依赖的jar包 及struts2-json-plugin-2.1.8.1.jar 编写文

  • jQuery插件ajaxFileUpload实现异步上传文件效果

    ajaxFileUpload是一个异步上传文件的jQuery插件. 传一个不知道什么版本的上来,以后不用到处找了. 语法:$.ajaxFileUpload([options]) options参数说明: 1.url   上传处理程序地址. 2,fileElementId   需要上传的文件域的ID,即<input type="file">的ID. 3,secureuri 是否启用安全提交,默认为false. 4,dataType 服务器返回的数据类型.可以为xml,scri

  • PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例

    平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错,但是由于手机不支持flash,所以不得不再找一个文件上传插件来用了.后来发现ajaxFileUpload这个插件挺不错,所以就用这个插件来做异步上传文件的效果.网上也有很多对ajaxFileUpload插件的使用的文章,不过我发现没有PHP版,所以这次服务器那边的处理就使用PHP语言来处理. 一.详解ajaxFileUpload插件的语法参数 原理:ajaxfileupload是通过监听iframe的onload方

  • jQuery插件AjaxFileUpload实现ajax文件上传

    本文实例为大家分享了AjaxFileUpload实现文件上传的具体代码,供大家参考,具体内容如下 jQuery插件AjaxFileUpload用来实现ajax文件上传,该插件使用非常简单,接下来写个demo演示怎么用AjaxFileUpload插件实现文件上传. 1.引入AjaxFileUpload插件相关的js 复制代码 代码如下: <script type="text/javascript" src="<%=basePath%>resources/js/

  • jQuery插件ajaxFileUpload异步上传文件

    ajaxFileUpload.js 很多同名的,因为做出来一个很容易. 我用的是这个:https://github.com/carlcarl/AjaxFileUpload 下载地址在这里:http://xiazai.jb51.net/201610/yuanma/ajaxfileupload(jb51.net).rar AjaxFileUpload.js并不是一个很出名的插件,只是别人写好的放出来供大家用,原理都是创建隐藏的表单和iframe然后用JS去提交,获得返回值. 当初做了个异步上传的功能

  • jQuery插件ajaxfileupload.js实现上传文件

    AjaxUpLoad.js的使用实现无刷新文件上传,如图 1.创建页面并编写HTML 上传文档: <div class="uploadFile"> <span id="doc"><input type="text" disabled="disabled" /></span> <input type="hidden" id="hidFileNam

  • JQuery插件ajaxfileupload.js异步上传文件实例

    在服务器端做文件上传的过程中,如果使用web服务器短端的上传控件去上传文件的话,会导致页面刷新一次,这样对用户的体验就不是很友好了.ajaxfileupload.js是一款jQuery的异步上传文件插件,使用简单且容易上手. 前置条件:ajaxfileupload.js文件,百度下载一个就行. JS引用: 复制代码 代码如下: <script src="/Content/JQueryJS/jquery-2.1.1.js"></script> <script

  • 一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子

    jQuery插件AjaxFileUpload可以实现ajax文件上传,该插件使用非常简单,首先了解一下正确使用AjaxFileUpload插件的方法,然后再了解一些常见的错误信息和解决方法. 使用说明 需要使用jQuery库文件 和AjaxFileUpload库文件 使用实例 一,包含文件部分 复制代码 代码如下: <script type="text/javascript" src="jquery.js"></script> <scr

随机推荐