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

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. docker无法连接进程

    simon@simon-X550LD:~$ docker run hello-world docker: Cannot connect to the Docker daemon. Is the doc ...

  2. 服务器端启动soket多线程

    方法一: Socket socket=null try{ ServerSocket serversocket=nwe ServerSocket(8080) while(true){ socket=se ...

  3. Python使用re实现计算器

    re 正则表达式 计算器 海瑞博客-学习python之路•2016-12-01•Python• 59•0•A+ A- re是一门小型语言 元字符 .      通配符除了\n ^     以什么开始的 ...

  4. Git中的fetch和pull

    http://blog.haohtml.com/archives/12674 Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会 ...

  5. STM32之外部中断控制

    一.STM32外部中断 1.STM32外部中断结构图 如上图所示:主要包括四个环节,GPIO.AFIO.EXTI.NVIC.以STM32F103VE(100脚)为例说明硬件模块的数量: GPIO:   ...

  6. ARM中的PC和AXD的PC

    R15 (PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令.一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC 总是指向第三条指令 ...

  7. 4069: [Apio2015]巴厘岛的雕塑

    Description 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 1 到 N 连续地进行标号,其中第 i 座雕塑的年龄 ...

  8. iOS 推荐博客

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Franz Fang链接:http://www.zhihu.com/question/20264108/answer/3026 ...

  9. 在Eclipse中搭建C/C++环境

    在Eclipse中搭建C/C++环境 本文地址:http://blog.csdn.net/you_and_me12/article/details/7389934 习惯了使用eclipse编程后,现在 ...

  10. 如何开启PDO,PDO_MYSQL扩展

    开启这个功能的具体方法就是设置php.ini文件,步骤如下: 1.查看public_html目录下没有php.ini文件,如果有的, 打开文件查找 extension=php_pdo_mysql.dl ...