search
HomeJavajavaTutorialCode example of using ajaxfileupload to implement refresh-free upload

本篇文章主要介绍了SpringMVC结合ajaxfileupload实现文件无刷新上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

jQuery没有提供ajax的文件上传,我们可以通过ajaxfileupload实现ajax文件的上传。其实ajaxfileupload文件上传特别的简单。下面就演示一下在SpringMVC中实现ajax的文件上传。

1、后台接收代码

首先在spring的配置文件中添加文件上传配置  

<!-- 文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/> 
</bean>

再写文件接收的代码

package com.chinaunicom.jlmssp.controller;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import com.chinaunicom.jlmssp.model.DataResponse;
import com.chinaunicom.jlmssp.model.JavaToJsMsg;
import com.chinaunicom.jlmssp.model.Org_UserInfo;
import com.chinaunicom.jlmssp.model.Repaly_Expert_Home_Page;
import com.chinaunicom.jlmssp.services.Replay_ExpertManageService;

/**
 * 项目复制管理子系统
 * 专家云管理
 * @author SunYue
 * @version 0.1
 */
@Controller
@RequestMapping("/admin/Replay_ExpertManageController.do")
public class Replay_ExpertManageController {
  
  private static final HashMap<String, String> TypeMap = new HashMap<String, String>();

  static {
    TypeMap.put("image", "gif,jpg,jpeg,png,bmp");
    TypeMap.put("flash", "swf,flv");
    TypeMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
    TypeMap.put("file", "doc,docx,xls,xlsx,ppt,pptx,htm,html,txt,dwg,pdf");
  }


  @Autowired
  Replay_ExpertManageService replayExpertManageService;
    
    /**
     * @author sunyue
     * @date 2017年2月28日 下午12:49:33
     * @Description: 图片上传方法
     * @return message: -1 没有文件上传 0 上传成功 1 上传失败 2 文件超过上传大小 3 文件格式错误 4 上传文件路径非法 5 上传目录没有写权限
     * @return void 返回类型
     */
    @RequestMapping(params = "op=getImageUpload", method = RequestMethod.POST)
    public void getImageUpload(@RequestParam("upload") CommonsMultipartFile file,HttpServletRequest request,
        HttpServletResponse response) {
      if (!file.isEmpty()) {
        /*ServletContext servletContext = request.getSession()
            .getServletContext();
        String uploadPath = servletContext.getRealPath("/")
            + "images\\replay-expert\\";
        
        String upPathString = request.getServletPath(); */
        
        //获取项目工作空间下工程路径的方法,将图片保存到工程路径下
        String t=Thread.currentThread().getContextClassLoader().getResource("").getPath();
         int num=t.indexOf(".metadata");
         String uploadPath=t.substring(1,num).replace(&#39;/&#39;, &#39;\\&#39;)+"jl_mssp_V3_0\\WebContent\\images\\replay-expert\\";
        
        // 文件上传大小
        long fileSize = 3 * 1024 * 1024;

        if (file.getSize() > fileSize) {
          backInfo(response, false, 2, "");
          return;
        }

        String OriginalFilename = file.getOriginalFilename();

        String fileSuffix = OriginalFilename.substring(
            OriginalFilename.lastIndexOf(".") + 1).toLowerCase();
        if (!Arrays.asList(TypeMap.get("image").split(",")).contains(
            fileSuffix)) {
          backInfo(response, false, 3, "");
          return;
        }

        if (!ServletFileUpload.isMultipartContent(request)) {
          backInfo(response, false, -1, "");
          return;
        }

        // 检查上传文件的目录
        File uploadDir = new File(uploadPath);
        if (!uploadDir.isDirectory()) {
          if (!uploadDir.mkdir()) {
            backInfo(response, false, 4, "");
            return;
          }
        }

        // 是否有上传的权限
        if (!uploadDir.canWrite()) {
          backInfo(response, false, 5, "");
          return;
        }
        
        //新文件名
        String newname = "";
        /*if(null != filePre){
          newname += filePre;//对应模块上传的文件名前缀
        }*/
        
         newname +=  "test1111" + "." + fileSuffix;

        File saveFile = new File(uploadPath, newname);

        try {
          file.transferTo(saveFile);
          backInfo(response, true, 0, newname);
        } catch (Exception e) {
          //LOG.error(e.getMessage(), e);
          backInfo(response, false, 1, "");
          return;
        }
      } else {
        backInfo(response, false, -1, "");
        return;
      }
    }
    
    // 返回信息
    private void backInfo(HttpServletResponse response, boolean flag, int message,
        String fileName) {
      String json = "";
      if (flag) {
        json = "{ \"status\": \"success";
      } else {
        json = "{ \"status\": \"error";
      }
      json += "\",\"fileName\": \"" + fileName + "\",\"message\": \"" + message + "\"}";
      try {
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write(json);
      } catch (IOException e) {
        //LOG.error(e.getMessage(), e);
      }
    }
}

2、前台接受代码

使用ajaxfileupload时,首先下载ajaxfileupload文件,导入对应的js文件   

<script type="text/javascript" src="js/ajaxfileupload.js"></script>

文件传输字段必须为file类型,如下:

<input type="file" id="file" name="file" onchange="ajaxFileUpload();"/>

 其次,处理上传文件: 

function ajaxFileUpload() {
  $.ajaxFileUpload({
    type: "POST",
    async: false,
    data: { "op": &#39;getImageUpload&#39;},
    url:"Replay_ExpertManageController.do",
    dataType: &#39;json&#39;,
    secureuri: false,
    fileElementId: "upload",
    success: function(data, status) {
      if (data.status == "success") {
        //上传成功
        alert("上传照片成功");
      }
      switch(data.message){
       //解析上传状态
        case "0" : //上传成功
              break;
        case "-1" : //上传文件不能为空
             break;
        default: //上传失败
           break;
      }
      return false;
    }/* ,
    error : function (jqXHR, textStatus, errorThrown) {
      //弹出jqXHR对象的信息
      alert(jqXHR.responseText);
      //alert(jqXHR.status);
      //alert(jqXHR.readyState);
      //alert(jqXHR.statusText);
        //弹出其他两个参数的信息
      //alert(textStatus);
      alert(errorThrown);
      return false;
    } */
  });
}

三、由于网上的ajaxuploadfile文件都是高版本的,这里将改版完全版文件传上,自己使用

jQuery.extend({
  handleError: function( s, xhr, status, e )     {
    // If a local callback was specified, fire it
        if ( s.error ) {
          s.error.call( s.context || s, xhr, status, e );
        }

        // Fire the global callback
        if ( s.global ) {
          (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
        }
  },
  createUploadIframe: function(id, uri)
  {
 
    var frameId = &#39;jUploadFrame&#39; + id;
    
    if(window.ActiveXObject) {
      if(jQuery.browser.version=="9.0")
      {
        io = document.createElement(&#39;iframe&#39;);
        io.id = frameId;
        io.name = frameId;
      }
      else if(jQuery.browser.version=="6.0" || jQuery.browser.version=="7.0" || jQuery.browser.version=="8.0")
      {
      
        var io = document.createElement(&#39;<iframe id="&#39; + frameId + &#39;" name="&#39; + frameId + &#39;" />&#39;);
        if(typeof uri== &#39;boolean&#39;){
          io.src = &#39;javascript:false&#39;;
        }
        else if(typeof uri== &#39;string&#39;){
          io.src = uri;
        }
      }
    }
    else {
      var io = document.createElement(&#39;iframe&#39;);
      io.id = frameId;
      io.name = frameId;
    }
    io.style.position = &#39;absolute&#39;;
    io.style.top = &#39;-1000px&#39;;
    io.style.left = &#39;-1000px&#39;;

    document.body.appendChild(io);

    return io;    
  },
  ajaxUpload:function(s,xml){
    //if((fromFiles.nodeType&&!((fileList=fromFiles.files)&&fileList[0].name)))

    var uid = new Date().getTime(),idIO=&#39;jUploadFrame&#39;+uid,_this=this;
    var jIO=$(&#39;<iframe name="&#39;+idIO+&#39;" id="&#39;+idIO+&#39;" style="display:none">&#39;).appendTo(&#39;body&#39;);
    var jForm=$(&#39;<form action="&#39;+s.url+&#39;" target="&#39;+idIO+&#39;" method="post" enctype="multipart/form-data"></form>&#39;).appendTo(&#39;body&#39;);
    var oldElement = $(&#39;#&#39;+s.fileElementId);
    var newElement = $(oldElement).clone();
    $(oldElement).attr(&#39;id&#39;, &#39;jUploadFile&#39;+uid);
    $(oldElement).before(newElement);
    $(oldElement).appendTo(jForm);

    this.remove=function()
    {
      if(_this!==null)
      {
        jNewFile.before(jOldFile).remove();
        jIO.remove();jForm.remove();
        _this=null;
      }
    }
    this.onLoad=function(){
    
      var data=$(jIO[0].contentWindow.document.body).text();
  
  
      try{

        if(data!=undefined){
          data = eval(&#39;(&#39; + data + &#39;)&#39;);
          try {
            
            if (s.success)
              s.success(data, status);
  
            // Fire the global callback
            if(s.global)
              jQuery.event.trigger("ajaxSuccess", [xml, s]);
            if (s.complete)
              s.complete(data, status);
            xml = null;
           } catch(e)
             {
          
            status = "error";
            jQuery.handleError(s, xml, status, e);
           }

           // The request was completed
           if(s.global)
             jQuery.event.trigger( "ajaxComplete", [xml, s] );
           // Handle the global AJAX counter
           if (s.global && ! --jQuery.active )
             jQuery.event.trigger("ajaxStop");

           // Process result
   
        }
     }catch(ex){
       alert(ex.message);
     };
    }
    this.start=function(){jForm.submit();jIO.load(_this.onLoad);};
    return this;
     
  },
  createUploadForm: function(id, url,fileElementId, data)
  {
    //create form  
    var formId = &#39;jUploadForm&#39; + id;
    var fileId = &#39;jUploadFile&#39; + id;
    var form = jQuery(&#39;<form action="&#39;+url+&#39;" method="POST" name="&#39; + formId + &#39;" id="&#39; + formId + &#39;" enctype="multipart/form-data"></form>&#39;);  
    if(data)
    {
      for(var i in data)
      {
        jQuery(&#39;<input type="hidden" name="&#39; + i + &#39;" value="&#39; + data[i] + &#39;" />&#39;).appendTo(form);
      }      
    }  

    var oldElement = jQuery(&#39;#&#39; + fileElementId);
    var newElement = jQuery(oldElement).clone();
    jQuery(oldElement).attr(&#39;id&#39;, fileId);
    jQuery(oldElement).before(newElement);
    jQuery(oldElement).appendTo(form);

    //set attributes
    jQuery(form).css(&#39;position&#39;, &#39;absolute&#39;);
    jQuery(form).css(&#39;top&#39;, &#39;-1200px&#39;);
    jQuery(form).css(&#39;left&#39;, &#39;-1200px&#39;);
    jQuery(form).appendTo(&#39;body&#39;);    
    return form;
  },
  ajaxFileUpload: function(s) {
    // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout  
    // Create the request object
    var xml = {};
    s = jQuery.extend({}, jQuery.ajaxSettings, s);
    if(window.ActiveXObject){
      var upload = new jQuery.ajaxUpload(s,xml);
      upload.start();
     
    }else{
    var id = new Date().getTime();
    var form = jQuery.createUploadForm(id,s.url, s.fileElementId, (typeof(s.data)==&#39;undefined&#39;?false:s.data));
    var io = jQuery.createUploadIframe(id, s.secureuri);
    var frameId = &#39;jUploadFrame&#39; + id;
    var formId = &#39;jUploadForm&#39; + id;    
    // Watch for a new set of requests
    if ( s.global && ! jQuery.active++ )
    {
      jQuery.event.trigger( "ajaxStart" );
    }      
    var requestDone = false;
  
    if ( s.global )
      jQuery.event.trigger("ajaxSend", [xml, s]);
    // Wait for a response to come back
    var uploadCallback = function(isTimeout)
    {      
      var io = document.getElementById(frameId);
  
      try
      {        
        if(io.contentWindow)
        {
           xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
           xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
           
        }else if(io.contentDocument)
        {
           xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;
           xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;
        }            
      }catch(e)
      {
        jQuery.handleError(s, xml, null, e);
      }
      if ( xml || isTimeout == "timeout")
      {        
        requestDone = true;
        var status;
        try {
          status = isTimeout != "timeout" ? "success" : "error";
          // Make sure that the request was successful or notmodified
          if ( status != "error" )
          {
            // process the data (runs the xml through httpData regardless of callback)
            var data = jQuery.uploadHttpData(xml, s.dataType);  
            // If a local callback was specified, fire it and pass it the data
      
            if (s.success)
              s.success(data, status);
  
            // Fire the global callback
            if(s.global)
              jQuery.event.trigger("ajaxSuccess", [xml, s]);
            if (s.complete)
              s.complete(data, status);
            
          } else
            jQuery.handleError(s, xml, status);
        } catch(e)
        {
          status = "error";
          jQuery.handleError(s, xml, status, e);
        }

        // The request was completed
        if(s.global)
          jQuery.event.trigger( "ajaxComplete", [xml, s] );
        // Handle the global AJAX counter
        if (s.global && ! --jQuery.active )
          jQuery.event.trigger("ajaxStop");

        // Process result
        jQuery(io).unbind();

        setTimeout(function()
                  {  try
                    {
                      jQuery(io).remove();
                      jQuery(form).remove();  
                      
                    } catch(e)
                    {
                      jQuery.handleError(s, xml, null, e);
                    }                  

                  }, 100);

        xml = null;

      }
    };
    // Timeout checker
    if (s.timeout>0)
    {
      setTimeout(function(){
        // Check to see if the request is still happening
        if( !requestDone ) uploadCallback("timeout");
      }, s.timeout);
    }
   
      try
        {
    
          var form = jQuery(&#39;#&#39; + formId);
          jQuery(form).attr(&#39;action&#39;, s.url);
          jQuery(form).attr(&#39;method&#39;, &#39;POST&#39;);
          jQuery(form).attr(&#39;target&#39;, frameId);
          
          if(form.encoding)
          {
            jQuery(form).attr(&#39;encoding&#39;, &#39;multipart/form-data&#39;);         
          }
          else
          {  
            jQuery(form).attr(&#39;enctype&#39;, &#39;multipart/form-data&#39;);      
          }  
     
          
          jQuery(form).submit();
    
        } catch(e)
        {  
          jQuery.handleError(s, xml, null, e);
        }
        
        jQuery(&#39;#&#39;+ frameId).load(uploadCallback);
        return {abort: function () {}};  
 
    }
  },

  uploadHttpData: function( r, type ) {
    
    var data = !type;
    data = type == "xml" || data ? r.responseXML : r.responseText;
    // If the type is "script", eval it in global context
    if ( type == "script" )
      jQuery.globalEval( data );
    // Get the JavaScript object, if JSON is used.
    if ( type == "json" ){
 
      eval( "data = " + $(data).html() );
    }
    // evaluate scripts within html
    if ( type == "html" )
      jQuery("<p>").html(data).evalScripts();
 
    return data;
  }
});

【相关推荐】

1. Java免费视频教程

2. JAVA教程手册

3. Java实现图片等比例缩略图视频教程

The above is the detailed content of Code example of using ajaxfileupload to implement refresh-free upload. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
将文件上传到 Amazon S3 时修复网络错误的 3 种方法将文件上传到 Amazon S3 时修复网络错误的 3 种方法Apr 14, 2023 pm 02:22 PM

Amazon Simple Storage Service,简称Amazon S3,是一种使用 Web 界面提供存储对象的存储服务。Amazon S3 存储对象可以存储不同类型和大小的数据,从应用程序到数据存档、备份、云存储、灾难恢复等等。该服务具有可扩展性,用户只需为存储空间付费。Amazon S3 有四个基于可用性、性能率和持久性的存储类别。这些类包括 Amazon S3 Standard、Amazon S3 Standard Infrequent Access、Amazon S3 One

node项目中如何使用express来处理文件的上传node项目中如何使用express来处理文件的上传Mar 28, 2023 pm 07:28 PM

怎么处理文件上传?下面本篇文章给大家介绍一下node项目中如何使用express来处理文件的上传,希望对大家有所帮助!

Vue 中如何实现文件上传功能?Vue 中如何实现文件上传功能?Jun 25, 2023 pm 01:38 PM

Vue作为目前前端开发最流行的框架之一,其实现文件上传功能的方式也十分简单优雅。本文将为大家介绍在Vue中如何实现文件上传功能。HTML部分在HTML文件中添加如下代码,创建上传表单:&lt;template&gt;&lt;div&gt;&lt;formref=&quot;uploadForm&quot;enc

CakePHP如何处理文件上传?CakePHP如何处理文件上传?Jun 04, 2023 pm 07:21 PM

CakePHP是一个开源的Web应用程序框架,它基于PHP语言构建,可以简化Web应用程序的开发过程。在CakePHP中,处理文件上传是一个常见的需求,无论是上传头像、图片还是文档,都需要在程序中实现相应的功能。本文将介绍CakePHP中如何处理文件上传的方法和一些注意事项。在Controller中处理上传文件在CakePHP中,上传文件的处理通常在Cont

浅析vue怎么实现文件切片上传浅析vue怎么实现文件切片上传Mar 24, 2023 pm 07:40 PM

在实际开发项目过程中有时候需要上传比较大的文件,然后呢,上传的时候相对来说就会慢一些,so,后台可能会要求前端进行文件切片上传,很简单哈,就是把比如说1个G的文件流切割成若干个小的文件流,然后分别请求接口传递这个小的文件流。

如何解决PHP语言开发中常见的文件上传漏洞?如何解决PHP语言开发中常见的文件上传漏洞?Jun 10, 2023 am 11:10 AM

在Web应用程序的开发中,文件上传功能已经成为了基本的需求。这个功能允许用户向服务器上传自己的文件,然后在服务器上进行存储或处理。然而,这个功能也使得开发者更需要注意一个安全漏洞:文件上传漏洞。攻击者可以通过上传恶意文件来攻击服务器,从而导致服务器遭受不同程度的破坏。PHP语言作为广泛应用于Web开发中的语言之一,文件上传漏洞也是常见的安全问题之一。本文将介

Django框架中的文件上传技巧Django框架中的文件上传技巧Jun 18, 2023 am 08:24 AM

近年来,Web应用程序逐渐流行,而其中许多应用程序都需要文件上传功能。在Django框架中,实现上传文件功能并不困难,但是在实际开发中,我们还需要处理上传的文件,其他操作包括更改文件名、限制文件大小等问题。本文将分享一些Django框架中的文件上传技巧。一、配置文件上传项在Django项目中,要配置文件上传需要在settings.py文件中进

php怎么上传文件并重命名php怎么上传文件并重命名Mar 23, 2023 pm 02:11 PM

PHP是一种常用的Web开发语言,很多网站都采用PHP来开发和维护,而其中最常见的功能之一是文件上传。在PHP中,文件上传的过程虽然相对简单,但是有时会遇到需要改变上传文件名字的情况。本文将介绍如何在PHP中实现上传文件并改变上传文件的名称。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment