使用ajax上传文件方法
众所周知ajax是使用了浏览器内部的XmlHttpRequest对象来传输XML数据的。既然是Xml的数据传输,那么传输的数据肯定是文本的,而文件上传则需要传输二进制的数据,显然用ajax是不可能的。
这里要说的是用ajax上传文件其实只是类似ajax的那种操作,实际上并没有用到xmlhttprequest对象,对于用户来说是不管使用的什么技术,他们要的是流程简便。客户有个需求是需要在表单操作时点击浏览文件后判断文件是否合法,以及其是否超过上传的限制大小,并且要考虑到不同浏览器兼容。开始准备找javascript 的html object{input{file}}对象,发现没有兼容的对象,于是被迫使用伪ajax。
我的思路和方法是:
- 添加一个隐藏的iframe和ajax_callback函数
- 当用户行为触发时改变form的action值并且target到隐藏的iframe
- iframe中的伪ajax处理结束后调用parent.ajax_callback来处理结果
- 在ajax_callback中还原form的原始action值和target值
example:
html code:sample.html
<script type="text/javascript" language="javascript" src="check_file.js"></script>
<form name="upfile_form" action="request.php?act=upload" method="POST" enctype="multipart/form-data">
<p>input file title:
<input type="text" name="file_title" />
</p>
<p>select less than 200K file:
<input type="file" name="upload_file" id="upload_file" onchange="checkFileSize(this);" />
</p>
<p>
<input type="submit" value="submit" />
</p>
<iframe name="check_file_frame" style="display:none;"></iframe>
</form>
<form name="upfile_form" action="request.php?act=upload" method="POST" enctype="multipart/form-data">
<p>input file title:
<input type="text" name="file_title" />
</p>
<p>select less than 200K file:
<input type="file" name="upload_file" id="upload_file" onchange="checkFileSize(this);" />
</p>
<p>
<input type="submit" value="submit" />
</p>
<iframe name="check_file_frame" style="display:none;"></iframe>
</form>
js code:check_file.js
var fileForm = new Object();
function checkFileSize(fileObj) {
if(fileObj.value != "") {
var form = document.forms['upfile_form'];
//把form的原始数据缓存起来
fileForm.f = form;
fileForm.a = form.getAttribute("action"); //form.action 为一个静态的对象,所以这里要使用getAttribute方法取值
fileForm.t = form.target;
//请求服务器端
form.target = "check_file_frame";
form.action = "./ajax.php?act=upload";
//form.submit(); 其实上面的action已经会执行submit操作,这步可有可无
}
return false;
}
function ajax_callback(result) {
//还原form属性
fileForm.f.target = fileForm.t;
fileForm.f.setAttribute("action", fileForm.a);
//处理结果
switch(result) {
case 0:
alert("文件超过了200K或者没有选择文件,请重新上传!");
//todo somthing
default :
alert("合法");
//do somthing,如果你想使用这种方法实现真正的上传的话,那么在成功后把返回的文件路经存储在一个 input[hidden]里是个不错的办法
}
return ;
}
function checkFileSize(fileObj) {
if(fileObj.value != "") {
var form = document.forms['upfile_form'];
//把form的原始数据缓存起来
fileForm.f = form;
fileForm.a = form.getAttribute("action"); //form.action 为一个静态的对象,所以这里要使用getAttribute方法取值
fileForm.t = form.target;
//请求服务器端
form.target = "check_file_frame";
form.action = "./ajax.php?act=upload";
//form.submit(); 其实上面的action已经会执行submit操作,这步可有可无
}
return false;
}
function ajax_callback(result) {
//还原form属性
fileForm.f.target = fileForm.t;
fileForm.f.setAttribute("action", fileForm.a);
//处理结果
switch(result) {
case 0:
alert("文件超过了200K或者没有选择文件,请重新上传!");
//todo somthing
default :
alert("合法");
//do somthing,如果你想使用这种方法实现真正的上传的话,那么在成功后把返回的文件路经存储在一个 input[hidden]里是个不错的办法
}
return ;
}
phpcode:ajax.php
<script type="text/javascript" language="javascript">
<?php
if($_REQUEST['act'] == "upload") {
if(empty($_FILES['upload_file'])) {
die("parent.ajax_callback(0);");
}
if($_FILES['upload_file']['size'] > 200*1024) {
die("parent.ajax_callback(0);");
}
die("succeed");
}
?>
</script>
<?php
if($_REQUEST['act'] == "upload") {
if(empty($_FILES['upload_file'])) {
die("parent.ajax_callback(0);");
}
if($_FILES['upload_file']['size'] > 200*1024) {
die("parent.ajax_callback(0);");
}
die("succeed");
}
?>
</script>
相关推荐
在现代Web开发中,"上传文件AJAX"是一项至关重要的技术,它允许用户在不刷新整个页面的情况下,通过异步方式上传文件。这种方式极大地提升了用户体验,因为它使得网页交互更加流畅和快速。AJAX(Asynchronous ...
但随着技术的发展,人们找到了利用AJAX进行文件上传的方法,例如通过使用插件或库,如本案例中的"ajaxfileupload"。 "ajaxfileupload"是一个JavaScript库,专门用于解决AJAX文件上传的问题。它使得开发者能够轻松地...
在现代Web应用中,用户经常需要上传文件,如图片、文档等。为了提供更好的用户体验,开发者通常会采用AJAX(Asynchronous JavaScript and XML)技术实现异步文件上传,避免传统方式下页面刷新带来的中断感。AJAX允许...
首先,理解AJAX上传的基本原理。传统的文件上传通常涉及整个页面的刷新,而AJAX允许我们仅更新部分网页内容,提高用户体验。通过XMLHttpRequest对象或使用jQuery等库提供的方法,我们可以创建异步请求,将文件数据...
下面我们将深入探讨Ajax上传文件的核心原理、实现方法以及相关的JavaScript插件。 一、Ajax(异步JavaScript和XML)简介 Ajax并不是一个单一的技术,而是一种利用多种现有技术(如JavaScript、XML、HTML、CSS等)来...
Ajax上传文件提供了一种无刷新页面的用户体验,使得用户在上传文件时不必等待页面重新加载。本文将详细探讨如何真正实现这个功能,并确保在多种浏览器中都能正常工作。 首先,让我们理解Ajax的核心原理。Ajax(异步...
首先,要理解Ajax上传文件的工作原理。传统的文件上传通常依赖于`<form>`元素,该元素的`enctype`属性设置为`multipart/form-data`,然后通过`<input type="file">`让用户选择文件。然而,这种方式会导致页面刷新,...
Ajax异步上传文件的基本原理是利用XMLHttpRequest对象或者Fetch API发送HTTP请求,将文件数据以二进制流的形式传输到服务器。在上传过程中,可以显示进度条、错误提示等反馈信息,提供更好的交互体验。 **一、实现...
"Ext Ajax 上传文件"这个主题涉及到的是使用Ext JS框架中的Ajax组件来实现文件的上传功能。Ext JS是一个强大的JavaScript库,专门用于构建富客户端应用程序,它提供了一系列丰富的UI组件和强大的数据管理工具。 ...
本教程将基于标题“大文件上传,ajax实现,支持10G以上的上传”和描述,详细介绍如何使用AJAX实现大文件上传,并探讨其背后的原理和技巧。 首先,理解大文件上传的关键在于分块上传。当文件过大时,一次性上传整个...
Ajax上传的优势在于它可以在不刷新页面的情况下完成文件上传,提高用户体验。以下是一个简单的jQuery实现示例: 1. HTML部分: ```html 上传 <div id="progressBar"></div> ``` 2. JavaScript部分: ```...
例如,你可以通过`$_FILES['upload_file']['name']`获取上传文件的原始名称,`$_FILES['upload_file']['tmp_name']`获取临时存储的文件路径,然后使用`move_uploaded_file()`函数将文件移动到服务器的指定位置。...
首先,让我们了解一下Ajax上传文件的基本原理。Ajax(Asynchronous JavaScript and XML)技术结合JavaScript和XML,实现了浏览器和服务器之间的无刷新通信。在文件上传场景下,我们通常会使用FormData对象来封装文件...
首先,我们需要理解AJAX异步上传的基本原理。在传统的表单提交中,用户点击提交按钮后,浏览器会发送一个完整的HTTP请求,包括页面上的所有数据,这通常会导致页面刷新。而AJAX异步上传则不同,它通过JavaScript创建...
**二、文件上传原理** 在HTML中,`<input type="file">`标签用于选择本地文件。在Flask中,通过`request.files`对象可以访问到这些上传的文件。每个文件都被封装为一个`FileStorage`对象,可以读取、保存或处理。 *...
二、ASP AJAX无刷新文件上传原理 1. 利用HTML5的FormData对象:HTML5引入了FormData对象,允许我们创建一个可以存储键值对的数据结构,特别适合用来处理文件上传。用户选择文件后,将文件数据添加到FormData对象中...
1. **Ajax上传文件**: 在前端,我们可以使用XMLHttpRequest对象或者jQuery的Ajax方法来实现文件的异步上传。创建一个`<input type="file">`元素供用户选择文件,然后监听其`change`事件。当用户选择文件后,读取...
### 二、Ajax实现文件上传原理 Ajax文件上传主要涉及HTML、JavaScript(jQuery库常用)、XMLHttpRequest对象和服务器端处理。以下为基本步骤: 1. **创建HTML表单**:创建一个包含文件输入控件的HTML表单,设置`...
需要注意的是,在实际部署时,还需考虑安全性问题,例如对上传文件的合法性验证等。 此外,虽然本例中使用了IFrame来实现无刷新的效果,但真正的AJAX实现方式会更灵活和高效,可以使用jQuery等库提供的AJAX方法来...