FormData可实现异步传输二进制文件(即异步文件上传)

XMLHttpRequest Level 2 添加了一个新的接口——FormData它能使现在的AJAX交互更加简单。之前的AJAX在上传前,需要将表单的数据序列化。与普通的 Ajax 相比,使用 FormData 的最大优点就是我们可以异步上传二进制文件。

边学边做,我也尝试做了一个上传图片的功能,如果以前可能要使用form提交或其他黑魔法,现在使用FormData就可以实现。

但是FormData存在兼容问题,详细请查看:

https://developer.mozilla.org/zh-CN/docs/Web/API/FormData#.E6.B5.8F.E8.A7.88.E5.99.A8.E5.85.BC.E5.AE.B9.E6.80.A7

异步上传二进制文件代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
</head>
<body>
  <form action="" id="testform">
    <input type="file" name="file">
    <input type="button" value="提交" id="subbtn">
  </form>
  <script>
  var subbtn = document.getElementById("subbtn");

  subbtn.onclick = function(){
    var formElement = document.getElementById("testform");
    var formData = new FormData(formElement);

    $.ajax({
      url: "1.php",
      type: "POST",
      data: formData,
      processData: false,  // 告诉jQuery不要去处理发送的数据
      contentType: false,  // 告诉jQuery不要去设置Content-Type请求头
      success: function(data){
        $("body").append(data);
      }
    });
  };
  </script>
</body>
</html>
<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "错误: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "文件名: " . $_FILES["file"]["name"] . "<br />";
  echo "类型: " . $_FILES["file"]["type"] . "<br />";
  echo "大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "存储位置: " . $_FILES["file"]["tmp_name"];
  }
?>
时间: 2024-10-21 05:38:39

FormData可实现异步传输二进制文件(即异步文件上传)的相关文章

关于异步文件上传和文件表单元素的复制、设置和清除

一.解决文件异步上传的方法有3种:1.使用iframe 2.使用FormData(html5新功能)  3.使用flash 1.使用iframe 原来我以为使用iframe是把整个表单复制到iframe里面,然后把iframe里面的表单提交给服务器,这样来实现表单的异步上传.最后我想错了,实现原理比我想的要简单的多.先看一下代码: 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2 <

异步文件上传组件 Uploader

Uploader是非常强大的异步文件上传组件,支持ajax.iframe.flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持 和常用插件,比如验证.图片预览.进度条等,广泛应用于淘宝网,比如退款系统.爱逛街.二手.拍卖.我的淘宝.卖家中心.导购中心等. Uploader的特性 支持ajax.flash.iframe三种方案,兼容所有浏览器.(iframe不推荐使用) 多主题支持,可以自己定制主题 丰富的插件支持 支持多选批量上传 支持上传进度显示 支持取消上传 支持图片预览(

JQUERY插件JqueryAjaxFileUplaoder----更简单的异步文件上传

异步上传相信大家都做过类似的功能,JqueryAjaxFileUploader为我们提供了更简单的实现和使用方式.不过既然是JQUERY的插件那么它所依赖的环境大家都懂得.JqueryAjaxFileUploader并不华丽,也没有提供美化文件上传控件的css,它并不像jQuery File Upload(喜欢的同学可以去尝试下),提供了美观的样式和专门的图片预览.多任务上传等等, JqueryAjaxFileUploader 所拥有的很简单,只是异步上传文件的功能,当然这并不排除由你亲自为它披

Ajax+formData异步文件上传

前端jsp: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+reque

【分享】兼容ie6-9和现代浏览器以及ios,android,pad等触屏设备的异步文件上传插件

核心代码 /** * 该插件用于兼容ie6-7-8-9及现代浏览器的异步上传文件. * 请注意,在ie6-7-8-9上面的原理是: * 新添加一个表单和一个iframe,然后每次选择都将file输入框复制到该表单上面,然后submit整个表单,这样就可以实现类似ajax提交文件的效果, * 但是有一点是没办法处理的,就是在客户端预览图片及判断文件大小.现代浏览器则可以. */ var AjaxFileInput=function(opts){ var settings={ container:"

一个异步文件上传的方式

不是我写的,我看了他的,思路很明确: 实现思路: 在js脚本中动态创建form,动态创建form中的内容,将文件上传的内容以隐藏域的方式提交过去,然后写好回调等. 感觉思路不难,但是我写不出来,感觉需要对于url,http有一定了解,js也ok才可. 代码: 上传的js: // JavaScript Document jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUpl

asp.net MVC4 异步文件上传

1.下载ajaxfileupload.js 2.在控制器内创建如下方法 //文件上传 public ActionResult uploadFile(HttpPostedFileBase file) { if (file == null) { return Json(new { result = "false", errorMsg="文件不存在" }, "text/html"); } string fileName = "~/Upload

cjhupload一个简单异步文件上传插件(html5+js)

来源:http://www.myopenresources.com/page/resource_detail_0.html?rid=370 更多文章请查看本人博客网站:http://www.myopenresources.com cjhupload是一个本人基于原生JS编写的一个文件上传插件,支持手机.电脑端,你可查看例子,或下载详细例子(请到下面的"下载地址"下载). 例子: <!DOCTYPE HTML> <html lang='zh'> <head&

SpringMVC异步文件上传下载

首先了解一下File的构造方法: File(String pathname):根据一个路径得到File对象 File(String parent,String child):根据一个目录和一个子文件/目录得到File对象 File(File parent,String child):根据一个父File对象和一个子文件/目录得到File对象 java.io.File.mkdir():只能创建一级目录,且父目录必须存在,否则无法成功创建一个目录.java.io.File.mkdirs():可以创建多