Upload

最原始方式 form表单提交

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

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

xhr2

关于xhr:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
alert(xhr.resopnseText);
}else{
alert(xhr.statusText);
}
} xhr.open('get', 'example.php');
xhr.send();

老版本xhr主要属性:

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

缺点:

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

xhr2

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

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

请求时限

xhr.timeout = 3000;
xhr.ontimeout = function(e){
console.log(e);
}

FormData(HTML5新增属性)

该对象可以模拟表单。

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

接受二进制数据

progress

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

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


document.getElementById('upload').addEventListener('change', function(){
var file = this.files[0];
var xhr = XMLHttpRequest();
var formdata = new FormData(document.getElementById('form')); formdata.append('test', 123);
formdata.append('file', file); // 监听progress事件了 上传 xhr.upload.onprogress = function(e){
if(event.lengthComputable){
var percentComplete = e.loaded / e.total;
}
}
xhr.open('POST', 'testagain');
xhr.send(formdata); })

其他相关事件:

  • 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. 03:成绩排序 个人博客:doubleq.win

    个人博客:doubleq.win 03:成绩排序 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出 ...

  2. vue项目性能优化(路由懒加载、gzip加速、cdn加速)

    前端工程性能优化一说意义深远悠长,本章主要介绍除了一些基础优化外如何实行路由懒加载.Gzip加速.CDN加速,让网页飞的快一些. 基础优化 老生常谈的一些: 不要在模板中写复杂的表达式 慎用watch ...

  3. Git和Github快速入门

    一.什么是Git? 假设你在的公司要上线一个新功能,你们开发团队为实现这个新功能,写了大约5000行代码,上线没2天,就发现这个功能用户并不喜欢,你老板让你去掉这个功能,你怎么办?你说简单,直接把50 ...

  4. Bootstrap学习笔记(排版)

    bootstrap简介: ☑  简单灵活可用于架构流行的用户界面和交互接口的html.css.javascript工具集. ☑  基于html5.css3的bootstrap,具有大量的诱人特性:友好 ...

  5. npm 更新至最新版本

    有时npm版本低了,一些操作有问题,要更新成最新. 官网中:  https://www.npmjs.com/get-npm     先查看对应的 node 版本 和 npm版本 Check that ...

  6. Compiling a kernel module for the raspberry pi 2 via Ubuntu host

    Compiling a kernel module for the raspberry pi 2 via Ubuntu host Normally compiling a kernel module ...

  7. arcgis for js/flex/sl 该选哪一个?

    arcgis server开发webgis 在客户端有3种选择:js.flex.sl 他们除了开发arcgis外,本身还有一些常用的领域 js:在传统网站中很常用 flex:游戏.视频播放.动画特效 ...

  8. JavaScript 小实例 - 表单输入内容检测,对页面的增删改

    JavaScript 小实例 - 表单输入内容检测,对页面的增删改 效果体验地址:https://xpwi.github.io/js/JavaScript01/jsForm.html 功能: 1.向页 ...

  9. git中常见操作指令

    从git上拉下一个项目: 1.git clone 项目链接                  2. git checkout development (切换到development分支)       ...

  10. Java容器之HashMap源码分析

    在java的容器框架中,hashMap是最常用的容器之一,下面我们就来深入了解下它的数据结构和实现原理 先看下HashMap的继承结构图 下面针对各个实现类的特点进行下说明:1)HashMap: 它是 ...