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

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. node-mongodb-native的几种连接数据库的方式

    h1,h2,h3,h4,h5,h6,p,blockquote { margin: 0; padding: 0;}body { font-family: "Helvetica Neue&quo ...

  2. 配置mybatis流程

    使用mybatis的优点: 1. 易于上手和掌握. 2. sql写在xml里,便于统一管理和优化. 3. 解除sql与程序代码的耦合. 4. 提供映射标签,支持对象与数据库的orm字段关系映射 5. ...

  3. iOS - Responder Chain

     在iOS中,当发生事件响应时,必须知道由谁来响应事件.这就是由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次 ...

  4. Nexus 7 跳过网络验证

     本文从著名安卓论坛 xda-developers 搬运而来,原文链接 http://forum.xda-developers.com/showthread.php?t=1909602 由于众所周知的 ...

  5. jquery之ajaxfileupload异步上传插件

    点我下载工程代码由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用Jquery Ajax File Uploader这个组件下载地址:http://www.phpletter.com/d ...

  6. 在安全层面,企业如何获得更好的投资回报率 ROI?

    前言 任何企业对投资都有回报的要求,回报可能是直接的「利润」,达到短期.长期的目标,或者通过投资减少损失.因此每个项目的决策者在每笔投资前都要衡量 ROI,证明该投资能达到的效果和收益,以便在项目结束 ...

  7. Freemarker 对null值报错的处理

    忽略null值 假设前提:user.name为null ${user.name},异常 ${user.name!},显示空白 ${user.name!'vakin'},若user.name不为空则显示 ...

  8. picturebox 图片自适应

    picturebox控件共有两种载入图片方式,分别为: pictureBox1.BackgroundImage = Image,pictureBox1.load(url) 为使加载的图片自使用控件尺寸 ...

  9. 从tcp原理角度理解Broken pipe和Connection reset by peer的区别

    从tcp原理角度理解Broken pipe和Connection reset by peer的区别 http://lovestblog.cn/blog/2014/05/20/tcp-broken-pi ...

  10. bzoj1858

    比较烦的线段树 首先询问3很弱智不说, 询问4以前做过类似的,好像是USACO月赛hotel那题类似,维护lmax,rmax,max三个域就可以了 操作0,操作1也很简单,仔细考虑一下就知道也是可以l ...