`
annan211
  • 浏览: 462952 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ajax 实现文件上传

 
阅读更多


  ajax 由于其无法直接发送表达形式的数据,因此不能直接使用ajax实现无刷新附件上传,但是可以通过其包装实现这一功能。


引入jquery 和 包装类

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



html中引用

  <td>
		            <input type="file" name="file" onchange="javascript:uploadFile()" title="上传图片" id="imagesfile"/>
		           	<input type="hidden" name="filmPic" id="filmPic"  />
		        </td>



  请尊重知识,请尊重原创 更多资料参考请见  http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1


上传js函数

function uploadFile() {
	
	$.ajaxFileUpload({
				url : '${pageContext.request.contextPath}/service/filmBaseInfo/uploadImage',
				secureuri : false,
				fileElementId : 'imagesfile',
				dataType : 'json',
				error : function(data, status, e) {
					alert(data);
				},
				success : function(data, status) {
					console.log(data);
				}
			});
}


  请尊重知识,请尊重原创 更多资料参考请见  http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1
spring mvc 处接受附件

@RequestMapping(value="/service/filmBaseInfo/uploadImage", method =RequestMethod.POST)
	@ResponseBody
	public Result uploadCardImage(HttpServletRequest request, HttpServletResponse response, MultipartFile file) throws Exception{
		Result result = null;
		
		AppServiceLog.info("begin upload the  film image,and the file is {} ", file);
		
		result = fdfsUploadFileManager.fdfsUploadImage(file, AttachmentTypeEnum.USER, 120,120);
		
		return result;
	}




使用以上方式即可实现无刷新ajax附加上传。 好了,现在来看看 ajaxfileupload.js是如何实现的



jQuery.extend({
	

    createUploadIframe: function(id, uri)
	{
			//create frame
            var frameId = 'jUploadFrame' + id;
            var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="position:absolute; top:-9999px; left:-9999px"';
			if(window.ActiveXObject)
			{
                if(typeof uri== 'boolean'){
					iframeHtml += ' src="' + 'javascript:false' + '"';

                }
                else if(typeof uri== 'string'){
					iframeHtml += ' src="' + uri + '"';

                }	
			}
			iframeHtml += ' />';
			jQuery(iframeHtml).appendTo(document.body);

            return jQuery('#' + frameId).get(0);			
    },
    createUploadForm: function(id, fileElementId, data)
	{
		//create form	
		var formId = 'jUploadForm' + id;
		var fileId = 'jUploadFile' + id;
		var form = jQuery('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');	
		if(data)
		{
			for(var i in data)
			{
				jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
			}			
		}		
		var oldElement = jQuery('#' + fileElementId);
		var newElement = jQuery(oldElement).clone();
		jQuery(oldElement).attr('id', fileId);
		jQuery(oldElement).before(newElement);
		jQuery(oldElement).appendTo(form);


		
		//set attributes
		jQuery(form).css('position', 'absolute');
		jQuery(form).css('top', '-1200px');
		jQuery(form).css('left', '-1200px');
		jQuery(form).appendTo('body');		
		return form;
    },

    ajaxFileUpload: function(s) {
        // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout		
        s = jQuery.extend({}, jQuery.ajaxSettings, s);
        var id = new Date().getTime()        
		var form = jQuery.createUploadForm(id, s.fileElementId, (typeof(s.data)=='undefined'?false:s.data));
		var io = jQuery.createUploadIframe(id, s.secureuri);
		var frameId = 'jUploadFrame' + id;
		var formId = 'jUploadForm' + id;		
        // Watch for a new set of requests
        if ( s.global && ! jQuery.active++ )
		{
			jQuery.event.trigger( "ajaxStart" );
		}            
        var requestDone = false;
        // Create the request object
        var xml = {}   
        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] );
                    } 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
                if ( s.complete )
                    s.complete(xml, status);

                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('#' + formId);
			jQuery(form).attr('action', s.url);
			jQuery(form).attr('method', 'POST');
			jQuery(form).attr('target', frameId);
            if(form.encoding)
			{
				jQuery(form).attr('encoding', 'multipart/form-data');      			
            }
            else
			{	
				jQuery(form).attr('enctype', 'multipart/form-data');			
            }			
            jQuery(form).submit();

        } catch(e) 
		{			
            jQuery.handleError(s, xml, null, e);
        }
		
		jQuery('#' + 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 );
        // evaluate scripts within html
        if ( type == "html" )
            jQuery("<div>").html(data).evalScripts();

        return data;
    }
})




 

分享到:
评论

相关推荐

    ajax实现文件上传

    ### AJAX 实现文件上传 在探讨 AJAX 如何实现文件上传之前,我们首先简要回顾一下 AJAX 的历史背景及其带来的变革。AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分...

    Ajax实现文件上传

    本文将详细探讨如何使用Ajax实现文件上传,并特别关注文件上传进度条的实现。 一、Ajax基础 Ajax,全称Asynchronous JavaScript and XML,是一种创建动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以...

    ajax实现文件上传源码

    ### 二、Ajax实现文件上传原理 Ajax文件上传主要涉及HTML、JavaScript(jQuery库常用)、XMLHttpRequest对象和服务器端处理。以下为基本步骤: 1. **创建HTML表单**:创建一个包含文件输入控件的HTML表单,设置`...

    jquery+ajax实现文件上传的js

    本文将深入探讨如何利用jQuery和AJAX实现文件上传,并重点介绍`ajaxfileupload.js`这个jQuery插件。 首先,jQuery是一个轻量级的JavaScript库,它简化了DOM操作、事件处理和Ajax交互等任务。而AJAX(Asynchronous ...

    Ajax实现文件上传进度条

    下面将详细讲解如何利用Ajax实现文件上传进度条。 首先,我们需要理解Ajax的基本原理。Ajax(Asynchronous JavaScript and XML)是一种创建动态网页的技术,通过在后台与服务器进行少量数据交换,使得网页实现异步...

    jsf+ajax实现文件上传

    jsf结合ajax实现文件上传,值得阅读

    在Web API中使用jQuery AJAX实现文件上传的例子

    这个例子展示了如何在ASP.NET Web API中使用jQuery AJAX实现文件上传的基本流程。客户端通过AJAX发送文件到服务器,服务器接收文件并进行相应的处理。注意,实际应用中还需要考虑错误处理、文件大小限制、安全问题...

    【JavaScript源代码】jQuery+ajax实现文件上传功能.docx

    ### 使用jQuery与Ajax实现文件上传功能(含上传进度显示) #### 概述 本文将详细介绍如何利用jQuery和Ajax技术来实现文件上传的功能,并且能够实时显示文件上传的进度。此功能在很多应用场景下非常实用,比如用户...

    基于ajax实现文件上传并显示进度条

    下面给大家分享下基于ajax实现文件上传并显示进度条。在jsp部分,需要设计一个表单,form的属性添加 enctype=”multipart/form-data”,设计一个iframe,作为隐藏。form的target等于iframe的name; 在servlet部分:...

    使用ajax实现多文件上传

    使用普通表单的input框,引入多文件上传插件,传报文格式的参数,表单内容同时提交

    SpringMVC+Ajax异步文件上传

    在本教程中,我们将探讨如何结合`SpringMVC`和`Ajax`来实现异步文件上传,并讨论短视频背景以及`a`标签绑定文件域的相关知识。 1. **SpringMVC中的文件上传** - **MultipartFile接口**:`SpringMVC`提供了一个名为...

    ajax实现java文件下载

    本话题将详细探讨如何通过Ajax实现Java文件的下载,并介绍相关的核心概念和技术。 1. **Ajax**(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下,能够更新部分网页的技术。它通过JavaScript...

    php+AJAX实现文件上传系统

    本项目采用PHP作为后端处理语言,配合前端的AJAX技术,实现了文件管理的一系列功能,如新建目录、文件上传与下载、文件重命名以及删除。下面将详细阐述这些功能的实现原理和步骤。 **1. PHP基础** PHP是一种广泛...

    AJAX实现基于WEB的文件上传的进度控制源代码

    4. **AJAX实现文件上传**: - 首先,创建一个`&lt;input type="file"&gt;`元素让用户选择文件。 - 然后,使用JavaScript获取选中的文件,并创建一个`FormData`对象。 - 将文件添加到`FormData`对象,设置HTTP请求头,如...

    大文件上传, ajax 实现, 支持10G以上的上传

    本教程将基于标题“大文件上传,ajax实现,支持10G以上的上传”和描述,详细介绍如何使用AJAX实现大文件上传,并探讨其背后的原理和技巧。 首先,理解大文件上传的关键在于分块上传。当文件过大时,一次性上传整个...

    使用ajax实现上传文件的功能

    在IT开发领域,使用AJAX实现文件上传功能是一项常见的需求。AJAX(Asynchronous JavaScript and XML)允许网页在不需要重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。文件上传则允许用户选择文件...

    ssm整合+ajaxUpload文件上传

    AjaxUpload则是实现异步文件上传的一种JavaScript库,它允许用户在不刷新整个页面的情况下进行文件上传,提高了用户体验。接下来,我们将详细讨论这两个知识点。 首先,**Spring** 是一个全面的后端应用框架,它...

    Ajax 文件上传组件

    在提供的`AsyncUploaderDemo.sln`和`AsyncUploaderDemo`文件中,很可能是包含了一个实际的示例项目,该项目可能展示了如何使用某种前端框架(如Angular、React或Vue)结合Ajax实现文件上传功能。通过打开和研究这个...

    ajax异步文件上传,servlet处理

    为了提供更好的用户体验,开发者通常会采用AJAX(Asynchronous JavaScript and XML)技术实现异步文件上传,避免传统方式下页面刷新带来的中断感。AJAX允许在后台与服务器进行通信,而无需刷新整个页面。本篇文章将...

Global site tag (gtag.js) - Google Analytics