HTML5与Ajax强强联手 演绎文件上传

简介:

在本文中,将介绍如何利用Ajax及HTML5异步将文件上传到服务端。

  上传表单页面的设置

  先来看下上传表单页面的设置,代码如下:

<form id="upload" action="upload.php" method="POST" enctype="multipart/form-data">
<fieldset>
<legend>HTML File Upload</legend>
<input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="300000" />
<div>
    <label for="fileselect">Files to upload:</label>
    <input type="file" id="fileselect" name="fileselect[]" multiple="multiple" />
    <div id="filedrag">or drop files here</div>
</div>
<div id="submitbutton">
    <button type="submit">Upload Files</button>
</div>
</fieldset>
</form>

  这里,我们为表单的提交设置为upload.php,用来处理上传的文件,在表单中并且规定了上传的图片的大小不超过300K。

  上传的Javascript

  在对文件进行上传处理的Javascript中,代码如下:


// file selection
function FileSelectHandler(e) {
    // cancel event and hover styling
    FileDragHover(e);
    // fetch FileList object
    var files = e.target.files || e.dataTransfer.files;
    // process all File objects
    for (var i = 0, f; f = files[i]; i++) {
        ParseFile(f);
        UploadFile(f);
    }
}

  在上个教程中,已经对ParseFile(f)进行了介绍,现在着重看下UploadFile这个方法的代码,代码如下:

function UploadFile(file) {

  var xhr = new XMLHttpRequest();

  if (xhr.upload && file.type == "image/jpeg" && file.size <= $id("MAX_FILE_SIZE").value) {

  // start upload

  xhr.open("POST", $id("upload").action, true);

  xhr.setRequestHeader("X_FILENAME", file.name);

  xhr.send(file);

  }

  }

  在上面的代码中,使用了目前只有在FireFox和Chrome中才支持的XmlHttpRequest2对象,XmlHttpRequest2是对原先大家熟悉的xmlhttprequest的加强,目前还没最后定案,可以参考http://dev.w3.org/2006/webapi/XMLHttpRequest-2/的描述。在上面的代码中,首先是判断了上传文件的类型是否为图片文件以及大小是否符合要求,如果符合要求的话,则调用send方法发送文件到服务端,并且这里设置了HTTP文件头X_FILENAME为上传的文件名。

  在PHP服务端的代码中,首先通过HTTP头来判断是否通过AJAX上传还是普通的表单上传。

 $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);

  if ($fn) {

  // AJAX调用

  file_put_contents(

  'uploads/' . $fn,

  file_get_contents('php://input')

  );

  echo "$fn uploaded";

  exit();

  }


如果$fn中设置了值,则调用使用file_put_contents方法,将文件复制到uploads文件夹,而如果是通过普通表单的上传,则作如下判断:
 










本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/738542,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
JSON 前端开发 Java
利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细
利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细
142 0
|
存储 JavaScript 前端开发
Vue 和 HTML FormData配合axios或ajax上传文件,提交表单数据
Vue 和 HTML FormData配合axios或ajax上传文件,提交表单数据
657 0
|
6月前
|
关系型数据库 MySQL
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
|
3月前
|
JavaScript 前端开发 UED
HTML 文件上传 ,学会了保证不亏!
HTML 文件上传 ,学会了保证不亏!
|
5月前
|
Web App开发 前端开发 Java
基于Spring3 MVC实现基于HTML form表单文件上传
基于Spring3 MVC实现基于HTML form表单文件上传
45 7
基于Spring3 MVC实现基于HTML form表单文件上传
|
6月前
|
XML 前端开发 安全
【专栏:HTML 进阶篇】HTML 表单验证与 AJAX 交互
【4月更文挑战第30天】本文探讨了HTML表单验证和AJAX在现代网页开发中的重要性。HTML表单验证通过必填、数据格式和范围验证确保用户输入的准确性,而AJAX则实现异步通信,提供动态数据加载、局部更新和实时交互。两者的结合优化了表单处理,提高用户体验并减少服务器负担。实际应用包括在线注册、购物车系统和表单反馈。然而,开发者需注意浏览器兼容性、错误处理和安全性问题。掌握这些技术,能打造更智能、高效的网页应用,为用户提供更好的体验。在数字化时代,HTML表单验证和AJAX是网页创新与进步的关键。
47 0
|
6月前
|
XML 前端开发 JavaScript
AJAX | 拦截器、文件上传和下载
AJAX | 拦截器、文件上传和下载
66 0
|
12月前
|
JSON 前端开发 数据格式
ajax请求模拟json数据并且拼接到html
ajax请求模拟json数据并且拼接到html
46 0
|
前端开发
Ajax提交请求后台返回一个完整的html页面
Ajax提交请求后台返回一个完整的html页面
|
前端开发
ajax返回数据进行for双循环实现前端html渲染数据的解决方案
ajax返回数据进行for双循环实现前端html渲染数据的解决方案
154 0