HTML5可预览多图片ajax上传(使用formData传递数据)

在介绍上传图片之前,我们简单的来了解下FormData的基本使用;介绍完成后这些基本知识后,我们会在文章最后提供一个demo,就是ajax多图片上传前预览效果。

1. formData的基本的用法:
首先创建一个 空对象实例 代码如下:
var formData = new FormData();

1-1 获取值
通过get(key)/getAll(key)来获取对应的value;比如:

formData.get("name"); // 获取key为name的第一个值。
formData.getAll("name"); // 返回一个数组,获取key为name的所有值。

比如如下HTML代码:

<!DOCTYPE html>
 <html>
    <head>
        <meta charset="utf-8">
        <title>标题</title>
    </head>
    <body>
      <form id="myForm">
        <input type="text" name="name" placeholder="请输入你的名字" />
        <input type="password" name="password" placeholder="请输入你的密码" />

        <input type="text" name="n1" />
        <input type="text" name="n1" />

        <input type="submit" id="submitId" value="提交" />
      </form>
      <script>
        // 表单初始化
        var form = document.getElementById(‘myForm‘);
        var submitId = document.getElementById("submitId");
        submitId.addEventListener(‘click‘, function(e){
          e.preventDefault();
          var formData = new FormData(form);
          // 获取名字
          var name = formData.get("name");
          var psw = formData.get("password");
          console.log(name);
          console.log(psw);

          // 使用getAll 获取name为n1的所有值
          var arrs = formData.getAll("n1");
          console.log(arrs);  // 返回一个数组 

        }, false);

      </script>
    </body>
</html>

1-2 添加数据
可以通过append(key, value)来添加数据,如果指定的key不存在则会新增一条数据,如果key存在,则添加到数据的末尾。

var formData = new FormData();
formData.append(‘name‘, ‘kongzhi1‘);
formData.append(‘name‘, ‘kongzhi2‘);
formData.append(‘name‘, ‘kongzhi3‘);

console.log(formData.get(‘name‘)); // kongzhi1
console.log(formData.getAll(‘name‘)); // ["kongzhi1", "kongzhi2", "kongzhi3"]

1-3 设置修改数据
可以通过 set(key, value)来设置修改数据,如果指定的key不存在则会新增一条,如果存在,则会修改对应的值。

var formData = new FormData();
formData.append("name", ‘kongzhi1‘);
console.log(formData.getAll("name")); // ["kongzhi1"]

formData.set("name", ‘kongzhi2‘);
console.log(formData.getAll("name")); // ["kongzhi2"]

1-4 判断是否存在该数据
我们可以通过has(key) 来判断是否有对应的key值。

var formData = new FormData();
formData.append("name", ‘kongzhi1‘);
formData.append("name2", null);

console.log(formData.has("name")); // true
console.log(formData.has("name2")); // true
console.log(formData.has("name3")); // false

1-5 删除数据
通过delete(key), 来删除数据。

var formData = new FormData();
formData.append("name", "kongzhi1");
formData.append("name", "kongzhi2");

console.log(formData.getAll("name")); // ["kongzhi1", "kongzhi2"]

formData.delete("name");
console.log(formData.getAll("name")); // []

二:使用XMLHttpRequest formData上传文件
XMLHttpRequest2 定义了FormData类型,FormData为序列化表单以及创建与表单格式相同的数据(用于通过xhr数据传输)提供了便利。
浏览器支持:IE9及IE9-不支持。

原审XMLHttpRequest提交formData数据如下demo:

<!DOCTYPE html>
 <html>
    <head>
        <meta charset="utf-8">
        <title>标题</title>
    </head>
    <body>
      <form name=‘form1‘ id=‘form1‘>
        <input type=‘file‘ name=‘imgFile‘ />
        <input type=‘text‘ name=‘name1‘ />
        <input type=‘text‘ name=‘name2‘ />

        <div id="uploadImg">上传图片</div>
      </form>
      <script>
        var form1 = document.getElementById("form1");
        var uploadImg = document.getElementById("uploadImg");
        var xml = new XMLHttpRequest();

        uploadImg.addEventListener(‘click‘, function(e){
          e.preventDefault();
          var formData = new FormData(form1);
          xml.open("POST", url, true);
          xml.send(forData);
        });
      </script>
    </body>
</html>

2-2 使用jquery ajax方式来上传formData数据如下:

HTML代码如下:

<div id="container">
  <a href="javascript:void(0)" class="file">选择文件
     <input type=‘file‘ id="file" multiple accept = ‘image/gif,image/jpeg,image/jpg,image/png‘ />
     <input type="hidden" />
   </a>
</div>

javascript 代码如下:

var formdata = new FormData();
// 上传到服务器的字段名称
formdata.append("imgFile", $(‘#file‘)[0].files[0]);
$.ajax({
  url: self.url,
  type: ‘POST‘,
  cache: false,
  data: formdata,
  timeout: 5000,
  //必须false才会避开jQuery对 formdata 的默认处理
  // XMLHttpRequest会对 formdata 进行正确的处理
  processData: false,
  //必须false才会自动加上正确的Content-Type
  contentType: false,
  xhrFields: {
    withCredentials: true
  },
  success: function(data) {

  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {

  }

如上参数设置含义如下:
1. processData: false, 因为data值是formdata对象,不需要对数据做处理。
2. cache: false, 上传文件不需要缓存。
3. contentType: false, 因为是由<form>表单构造的FormData对象,且已经声明了属性enctype="multipart/form-data",所以这里设置为false。
4. xhrFields: { withCredentials: true }, 跨域请求设置

下面是一个 使用 ajax中的formData 多张图片上传前预览效果的一个demo。

formData 对ajax多张图片上传前预览效果如下

查看效果

API使用方式及github上的源码

时间: 2025-01-14 14:02:38

HTML5可预览多图片ajax上传(使用formData传递数据)的相关文章

基于HTML5的可预览多图片Ajax上传

一.关于图片上传什么什么的 在XHTML的时代,我们使用HTML file控件上传图片一次只能上传一张.要一次上传多图,做法是借助于flash.例如swfupload.js.可惜,使用复杂的点,比如flash文件需与页面同父文件夹,JavaScript文件大小也很可观. 我之前曾翻译编辑过一篇“Ajax Upload多文件上传插件”的文章,此插件的亮点是使用隐藏的iframe框架页面模拟ajax上传,但是,实际上,还是一次只能上传1张图片,可以多次上传而已. HTML5是个好东东,其中之一就是支

基于HTML5和JSP实现的图片Ajax上传和预览

本文对如何实现使用Ajax提交"multipart/form"格式的表单数据,已经如何在图片上传之前,在浏览器上进行预览.使用的主要相关技术HTML5的FILE API,XMLHttprequest Level2中对二进制文件上传的支持(通过构建FormData对象进行支持)以及Servlet 3.0支持的Multiconfig注解来支持文件的上传.在Servlet 3.0 规范之前通常使用第三方库如commons-fileupload进行解决文件上传. HTML5 中的 File 对

HTML5的可预览多图Ajax上传

参考地址:http://www.zhangxinxu.com/wordpress/2011/09/%E5%9F%BA%E4%BA%8Ehtml5%E7%9A%84%E5%8F%AF%E9%A2%84%E8%A7%88%E5%A4%9A%E5%9B%BE%E7%89%87ajax%E4%B8%8A%E4%BC%A0/ 1 <!doctype html> 2 <html> 3 <head lang="zh-CN"> 4 <meta charset=

MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件02-多文件上传

上一篇中,使用客户端jJSAjaxFileUploader插件实现单文件异步上传,本篇实现多文件异步上传. 本篇源码在github,先看效果: ● 上传文件显示进度条. ● 停止上传按钮和关闭缩略图按钮. ● 限制上传文件的类型. ● 限制上传文件的尺寸. ●同时上传多个文件成功后显示缩略图.文件名: ● 点击界面上的删除按钮,界面删除,同步删除文件夹中文件. ● 再点击上传文件,界面追加一行新的缩略图.文件名.删除按钮: □ HomeController 把上传的文件名改成以GUID命名的格式

AJAX上传multipart/form-data类型参数时,后台无法接收的解决方案

前台使用AJAX上传multipart/form-data类型参数时,后台接收到的值全是NULL,这有以下几个原因: 1.变量名称没有一一对应. 解决方案:检查前上传的name和后台的entity名称是否一样. 2.没有在Spring配置文件中添加如下配置: <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"

H5图片预览、压缩、上传

目标实现: 1.选择图片, 前端预览效果 2.图片大于1.2M的时候, 对图片进行压缩 3.以表单的形式上传图片 4.图片删除 预览效果图: 代码说明: 1.input:file选择图片 <!-- html部分 --> <ul id="preview" class="clear"> <li class="fl"> <img src="/images/audition/icon_upload.pn

基于HTML5多图片Ajax上传可预览

html5多图控件<input id="fileImage" type="file" size="30" name="files[]" multiple /> multiple 这个input的特性是html5新有的,所以IE6这么低级的货是无法兼容的. 这个属性相当于以前的这样的多图情况 <input id="fileImage" type="file" size=&

html选择图片后预览,保存并上传

html代码: <input type="file" id="file" style="display:none;"> <img src="" width="200px" height="200px" id="img-change"> <button id="btn">保存图片</button> js

js实现图片预览、压缩、上传

先看几个对象:Blob.ArrayBuffer.File.fileReader.formData 详细解释请参考:https://www.cnblogs.com/youhong/p/10875190.html 文件上传必用表单<form></form>: 1.获取表单信息2.转为base643.压缩base64通过canvas4.把base64转为文件对象5.AJAX提交信息 https://blog.csdn.net/Clara_G/article/details/8793685