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

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. 安装mod_deflate模块启用apache的GZIP压缩

    安装mod_deflate模块启用apache的GZIP压缩 操作系统:Linux Cent OS 5 / Max OS X 10.6 snow leopard相关环境:Apache httpd 2. ...

  2. 【python之旅】python的基础三

    目录: 1.装饰器 2.迭代器&生成器 3.Json & pickle 数据序列化 4.软件目录结构规范  一.装饰器 定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能 原 ...

  3. #Leet Code# Best Time to Buy and Sell Stock

    描述:数组 A,对于 i < j, 找到最大的 A[j] - A[i] 代码: class Solution: # @param prices, a list of integer # @ret ...

  4. ARM 的Thumb状态测试

    作为一个使用ARM的学习者,有必要全面了解你的处理器内核.尽管有些内容可能在实际应用中用不到,但是“了解”还是很必要的.Thumb状态,是ARM的一个特色,但是你知道Thumb状态与ARM状态最大的区 ...

  5. html5应用程序标签

    一.html5应用程序标签 (1)datalist需要数据载体 input list属性指向数据源 <input type="text" list="input_l ...

  6. SEVERE: Error listenerStart

    转载:http://blog.sina.com.cn/s/blog_43eb83b90102e2k6.html# 今天启动Tomcat启动不了,报以下错:org.apache.catalina.cor ...

  7. Cloud Test 在手,宕机时让您不再措手不及

    1月28日,Github 上午 10:04 分宕机了,导致全球各地的用户不能访问.官方回复可能是网络中断引起的,到 10:28 分已经可以正常访问. 对于互联网公司来说,一旦宕机就会措手不及,如何才能 ...

  8. Android 模拟器上的127.0.0.1 localhost

    调试中通过android simulator模拟器链接localhost或者127.0.0.1,因为我在电脑上面建立了apache,我的代码大概就是URL url = new URL(urlStrin ...

  9. CF 33B String Problem

    对每个位置进行操作,求出最终变成相同字母的代价,然后把所有的位上代价加起来,使得总代价最小.res[i][j]表示将字母i+'a'和字母j+'a'变为相同的代价,设最终都变成字母k+'a',那么res ...

  10. winform异型不规则界面设计

    一,不规则WINFORM窗体 Author:unknown From:Internet在以前版本的Visual Basic或Visual C++中,创建不规则窗体和控件是一件很复杂的事,不仅需要调用大 ...