Upload

最原始方式 form表单提交

  1. // html
  2. <form method="get" action="/test/upload">
  3. <input type="file" name="test" accept="image/jpeg, image/png" />
  4. <input type="submit" value="Submit" />
  5. <!-- <input id="submit" type="button" value ="Submit" /> -->
  6. </form>

兼容性:所有浏览器都支持。

xhr2

关于xhr:

  1. var xhr = new XMLHttpRequest();
  2. xhr.onreadystatechange = function(){
  3. if(xhr.readyState == 4 && xhr.status == 200){
  4. alert(xhr.resopnseText);
  5. }else{
  6. alert(xhr.statusText);
  7. }
  8. }
  9. xhr.open('get', 'example.php');
  10. xhr.send();

老版本xhr主要属性:

  • xhr.readyState:XMLHttpRequest对象的状态,等于4表示数据已经接收完毕。
  • xhr.status:服务器返回的状态码,等于200表示一切正常。
  • xhr.responseText:服务器返回的文本数据
  • xhr.responseXML:服务器返回的XML格式的数据
  • xhr.statusText:服务器返回的状态文本。

缺点:

  • 不支持读取和传送二进制文件。
  • 不能进行进度信息跟踪。
  • 受到“同域限制”,只能向同一域名的服务器请求数据。

xhr2

新版本的XMLHttpRequest对象,具有更多的特性:

  • 可以设置HTTP请求的时限
  • 可以使用FormData对象管理表单数据
  • 上传文件
  • 跨域请求
  • 获取服务器二进制数据
  • 可获取数据传输的进度

请求时限

  1. xhr.timeout = 3000;
  2. xhr.ontimeout = function(e){
  3. console.log(e);
  4. }

FormData(HTML5新增属性)

该对象可以模拟表单。

  1. var fdata = new FormData;
  2. var xhr = XMLHttpRequest();
  3. // 添加表单项
  4. fdata.append('username', '张三');
  5. xhr.open('POST', 'test/upload' );
  6. // 最后使用xhr2直接发送该表单对象
  7. xhr.send(fdata);
  8. // 也可以用来获取页面的表单
  9. var form = document.getElementById('testForm');
  10. var fData = new FormData(form);
  11. fData.append('test', 123);
  12. xhr.send(fdata);
  13. // 上传文件
  14. fData.append('name', file) // file 为input[type=file] change事件函数返回的file对象

接受二进制数据

progress

新版本xhr对象拥有progress事件。通过onprogress函数监听。

progess事件在该版本中分两种。上传时属于xhr对象,下载时属于xhr.upload对象。


  1. document.getElementById('upload').addEventListener('change', function(){
  2. var file = this.files[0];
  3. var xhr = XMLHttpRequest();
  4. var formdata = new FormData(document.getElementById('form'));
  5. formdata.append('test', 123);
  6. formdata.append('file', file);
  7. // 监听progress事件了 上传
  8. xhr.upload.onprogress = function(e){
  9. if(event.lengthComputable){
  10. var percentComplete = e.loaded / e.total;
  11. }
  12. }
  13. xhr.open('POST', 'testagain');
  14. xhr.send(formdata);
  15. })

其他相关事件:

  • xhr.onload 传输完成
  • xhr.onabort 传输被取消
  • xhr.error 传输中出现错误
  • xhr.onloadstart 开始传输
  • xhr.onloadend 传输结束 但不知道是否成功

【JavaScript-基础-文件上传】的更多相关文章

  1. PHP中使用Session配合Javascript实现文件上传进度条功能

    Web应用中常需要提供文件上传的功能.典型的场景包括用户头像上传.相册图片上传等.当需要上传的文件比较大的时候,提供一个显示上传进度的进度条就很有必要了. 在PHP .4以前,实现这样的进度条并不容易 ...

  2. jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能

     Ajax file upload plugin是一个功能强大的文件上传jQuery插件,可自定义链接.或其它元素庖代传统的file表单上传结果,可实现Ajax动态提示文件上传 过程,同时支撑多文 ...

  3. JavaScript检测文件上传的类型与大小

    $(function(){ $("#files").change(function(){ // 添加允许上传的文件类型 var exts = new Array(); exts[0 ...

  4. javascript实现文件上传之前的预览功能

    1.首先要给上传文件表单控件和图片控件设置name属性 <div class="form-group">                    <label fo ...

  5. 用PHP Session和Javascript实现文件上传进度条,处理进度条

    参考http://www.pureweber.com/article/php-upload-progress/ php显示处理进度条http://blog.csdn.net/boabc2304/art ...

  6. dwz+jquery+fileupload+springmvc实现文件上传 及图片预览

    1 前台jsp:文件的上传利用了iframe实现局部刷新功能.使用了apache的fileupload组件,用到的jar: commons-fileupload.jar,commons-io.jarD ...

  7. maven工程 java 实现文件上传 SSM ajax异步请求上传

    java ssm框架实现文件上传 实现:单文件上传.多文件上传(单选和多选),并且用 ajax 异步刷新,在当前界面显示上传的文件 首先springmvc的配置文件要配置上传文件解析器: <!- ...

  8. 文件上传:swfupload.js、blueimp-file-upload

    一.swfupload 1.下载swfupload http://code.google.com/p/swfupload/ 2. 3.API  http://www.cnblogs.com/henw/ ...

  9. 文件上传(asp.net webform中)

    1.配置允许上传文件大小 <configuration> <appSettings> <!--配置上传文件最大字节数:单位KB--> <add key=&qu ...

  10. 文件上传及时显示, 前端js和后端php相互结合使用

    文件读取 javascript 绑定文件上传变化事件 onchange 利用window对象 FileReader 调用方法 readerAsDataURL onload 方法 异步读取 属性:fil ...

随机推荐

  1. 【转】老生常谈-从输入url到页面展示到底发生了什么

    今天看到了一篇很详细地解释了从输入url到页面展示过程的文章,好文章不能错过,所以转到自己这里来了. 原文地址:老生常谈-从输入url到页面展示到底发生了什么 以下为原文: 刚开始写这篇文章还是挺纠结 ...

  2. laravel开发之-(1)数据库链接测试

    composer安装成功后,网站建设的操作记录: 一.修改默认首页.伪静态配置文件 1.将serve.php改为index.php 2.public文件夹下的.htaccess文件复制到根目录下 二. ...

  3. 使用nodeJs安装Vue-cli (win10 使用管理员身份)

    TIP:win10下安装,使用管理员身份进行,否则会有权限限制. 1,安装完成node,node有自带的npm,可以直接在cmd中,找到nodeJs安装的路径下,进行命令行全局安装vue-cli.(n ...

  4. 开博缘由 , 可点下看看 http://www.cnblogs.com/jshare

    记录日常用中用到.遇到的问题 实现过程,仅供参考 不定时更新 ------------------- 之前看过一个文章,大概说的是开发和用到的过的代码,可以提取出一些代码片段,长时间下来,你会发现部分 ...

  5. Android学习笔记(4)----Rendering Problems(The graphics preview in the layout editor may not be accurate)

    在Android Studio中新建了一个 setting.xml 文件,布局好文件后,从 Text 界面切换到 Design 界面,显示了如下错误: 网上搜寻 The graphics previe ...

  6. MySQL数据库(9)----从命令行获取元数据

    1. mysqlshow 命令提供的信息与某些 SHOW 语句很相似,因此可以从命令行提示符获取数据库和表的信息. (i)列出服务器所管理的数据库: root@javis:~$ mysqlshow - ...

  7. Microsoft Visual Studio 2010下log4cplus的安装,集成,测试

    原文:http://blog.csdn.net/eclipser1987/article/details/6904301 log4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发的工 ...

  8. selenium元素定位方法

    一.如何找到页面元素 Webdriver的findElement方法可以用来找到页面的某个元素,最常用的方法是用id和name查找.下面介绍几种比较常用的方法. 1.1By ID 假设页面写成这样:i ...

  9. ERP行业销售如何挖掘潜在客户?

    要看不同阶段,小企业发展到一定程度,第一个需求是单体财务系统.因为这个时候财务忙不过来了.在大一点就需要业务系统了,就是生产+进销存.有分公司就有集团级软件需求,接着就是oa啊HR啊上下游管理啊等等. ...

  10. 平均负载(Load average)

    load average 的含义平均负载(load average)是指系统的运行队列的平均利用率,也可以认为是可运行进程的平均数. top命令中load average显示的是最近1分钟.5分钟和1 ...