本地上传,提前预览(图片,视频)

1.html中div标签预览显示,button标签触发上传事件。

  1. <div  id="drop_area" style="border:3px dashed silver;width:200px; height:200px">将图片拖拽到此</div>
  2. <button onclick="xhr2()">ajax上传</button>

2.禁止浏览器打开文件行为

  1. document.addEventListener("drop",function(e){  //拖离
  2. e.preventDefault();
  3. })
  4. document.addEventListener("dragleave",function(e){  //拖后放
  5. e.preventDefault();
  6. })
  7. document.addEventListener("dragenter",function(e){  //拖进
  8. e.preventDefault();
  9. })
  10. document.addEventListener("dragover",function(e){  //拖来拖去
  11. e.preventDefault();
  12. })

3.拖拽,预览文件

  1. var box = document.getElementById('drop_area'); //拖拽区域
  2. box.addEventListener("drop",function(e){
  3. var fileList = e.dataTransfer.files; //获取文件对象
  4. //检测是否是拖拽文件到页面的操作
  5. if(fileList.length == 0){
  6. return false;
  7. }
  8. //拖拉图片到浏览器,可以实现预览功能
  9. //规定视频格式
  10. Array.prototype.S=String.fromCharCode(2);
  11. Array.prototype.in_array=function(e){
  12. var r=new RegExp(this.S+e+this.S);
  13. return (r.test(this.S+this.join(this.S)+this.S));
  14. };
  15. var video_type=["video/mp4","video/ogg"];
  16. //创建一个url连接,供src属性引用
  17. var fileurl = window.URL.createObjectURL(fileList[0]);
  18. if(fileList[0].type.indexOf('image') === 0){  //如果是图片
  19. var str="<img width='200px' height='200px' src='"+fileurl+"'>";
  20. document.getElementById('drop_area').innerHTML=str;
  21. }else if(video_type.in_array(fileList[0].type)){   //如果是规定格式内的视频
  22. var str="<video width='200px' height='200px' controls='controls' src='"+fileurl+"'></video>";
  23. document.getElementById('drop_area').innerHTML=str;
  24. }else{ //其他格式,输出文件名
  25. //alert("不预览");
  26. var str="文件名字:"+fileList[0].name;
  27. document.getElementById('drop_area').innerHTML=str;
  28. }
  29. resultfile = fileList[0];
  30. },false);

4.ajax上传

  1. function xhr2(){
  2. var xhr = new XMLHttpRequest();//第一步
  3. //新建一个FormData对象
  4. var formData = new FormData(); //++++++++++
  5. //追加文件数据
  6. formData.append('file', resultfile);
  7. //post方式
  8. xhr.open('POST', 'xhr2.php'); //第二步骤
  9. //发送请求
  10. xhr.send(formData);  //第三步骤
  11. //ajax返回
  12. xhr.onreadystatechange = function(){ //第四步
  13.     if ( xhr.readyState == 4 && xhr.status == 200 ) {
  14.       console.log( xhr.responseText );
  15.     }
  16.   };
  17. //设置超时时间
  18. xhr.timeout = 10000;
  19. xhr.ontimeout = function(event){
  20.     alert('请求超时!');
  21.   }
  22. }

5.php保存文件

    1. <?php
    2. print_r($_FILES["file"]);
    3. $name = $_FILES["file"]["name"]; //中文可能乱码使用iconv函数
    4. move_uploaded_file($_FILES["file"]["tmp_name"],iconv("UTF-8","gb2312",$name));
    5. ?>

JavaScript实现拖拽预览,AJAX小文件上传的更多相关文章

  1. 基于Bootstrap 3可预览的HTML5文件上传插件

    前端常用资源地址: http://www.htmleaf.com/ http://www.htmleaf.com/html5/html5muban/201505091801.html 源代码地址 ht ...

  2. 7 款基于 JavaScript/AJAX 的文件上传插件

    本文整理了7款基于JavaScript和AJAX的文件上传插件,这些插件基本上都能实现以下功能: 多文件上传 拖拽操作 实时上传进度 自定义上传限制 希望能为你的开发工作带来帮助. 1.  jQuer ...

  3. HTML5图片拖拽预览原理及实现

    一.前言 这两天恰好有一位同事问我怎样做一个图片预览功能.作为现代人的我们首先想到的当然是HTML5啦,其实HTML5做图片预览已经是一个老生常谈的问题了.我在这里就简单说说其中相关的一些东西,当然会 ...

  4. ASP.NET工作笔记之一:图片上传预览及无刷新上传

    转自:http://www.cnblogs.com/sibiyellow/archive/2012/04/27/jqueryformjs.html 最近项目里面涉及到无刷新上传图片的功能,其实也就是上 ...

  5. thinkphp3.2.2有预览的多图上传

    thinkphp3.2.2有预览的多图上传 整体思路 1 封装文件上传和图片上传的类文件 2 视图中添加相关JS和表单提交 3 控制器中添加上传文件的相关代码 一 2个class 文件 请上传到/Th ...

  6. iOS多线程与网络开发之小文件上传

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. /** 取得本地文件的MIMEType */ 2 - (void) getMIMEType { 3 // Socket 实现断点上传 4 5 //apa ...

  7. ajax提交表单、ajax实现文件上传

    ajax提交表单.ajax实现文件上传,有需要的朋友可以参考下. 方式一:利用from表单的targer属性 + 隐藏的iframe 达到类似效果, 支持提交含有文件和普通数据的复杂表单 方式二:使用 ...

  8. Ajax 与文件上传

    一 Ajax篇 1 ajax简介(Asynchronous Javascript And XML) 异步,Js,XML,即使用Javascript语言与服务器进行异步交互,传输的数据为xml(可扩展标 ...

  9. 基于 Django的Ajax实现 文件上传

    ---------------------------------------------------------------遇到困难的时候,勇敢一点,找同学朋友帮忙,找导师求助. Ajax Ajax ...

随机推荐

  1. php Static静态关键字

    静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用.静态属性不允许对象使用->操作符调用. class Car { private static $speed =  ...

  2. XML2_XML的节点和元素

    在JAVA语言中使用JAXP操作XML文件的时候,有两个接口,一个是Node,一个是Element,Element接口继承自Node接口. 在这一层次我们进一步理解XML中更具体的分类: 元素,属性, ...

  3. PYTHON 获取机器硬件信息及状态

    #!/usr/bin/env python # encoding: utf-8 from optparse import OptionParser import os import re import ...

  4. JavaNIO之Channel

    Channel的本质是通道,用来连接JVM之外数据向JVM内传输数据,比如来自于硬盘的文件,来自于网络的数据包.JVM之外的数据就是通过Channel进行数据传输:如果把Channel比作河道,那么作 ...

  5. DES原理与实现

    一 DES综述 DES是对称密码的一种,它使用56位秘钥对64位长分组进行加密.DES对每个分组的内容都会进行16轮迭代,每轮的操作相同但是对应不同的子秘钥.所有的子秘钥都是由主密钥推导而来. 64位 ...

  6. 基础canvas应用-钟表绘制

    首先,canvas语法基础薄弱的小伙伴请点这里,剩下的小伙伴们可以接着往下看了. 一个表,需要画什么出来呢:3条线(时分秒针),1个圆(表盘),以及60条短线/点(刻度). 嗯,没毛病. 那接下来让我 ...

  7. Python中类的运算符重载

    这篇文章仅仅是总结性质的,待以后有时间的时候会针对比较难理解的部分补充一些例子. 构造和析构 __init__ __del__ 函数调用 __call__ 打印操作 __str__ __repr__ ...

  8. XE5 安装破解

    以下转载自:  盒子 不可以将本破解补丁分享到国外网站.论坛中!低调啊! 本破解补丁只适合中国大陆地区的Delphi.C++Builder爱好者和开发者! 本破解补丁只可用于个人研究交流使用,不得做商 ...

  9. python系统编码格式

    python在安装的时候默认的编码格式是ASCII,当程序中出现非ASCII编码时,python的处理常常会报这样的错UnicodeDecodeError,python没办法处理非ASCII编码的,此 ...

  10. 【网络流24题】No. 13 星际转移问题 (网络判定 最大流)

    [题意] 由于人类对自然资源的消耗, 人们意识到大约在 2300 年之后, 地球就不能再居住了.于是在月球上建立了新的绿地,以便在需要时移民. 令人意想不到的是, 2177 年冬由于未知的原因, 地球 ...