使用XHR上传文件要不要了解一下?

上传文件 我们通过File API 能够访问到文件内容,然后把文件内容放到send()方法中,再通过POST请求,的确很容易就能实现上传。但这样做传递的是文件内容,因而服务器还得收集提交的内容,然后保存到另外一个文件中。其实,更好的做法是以表单提交方式来上传文件。

表单方式上传?没错!formData类型做这个很容易,分分钟几千万上下啦。 首先,要创建一个FormData对象,通过它调用append()方法传入相应的File对象作为参数。然后,再把FormData对象传递給XHR的send()方法,结果与通过表单上传一摸一样。

let droptarget = document.getElementById(‘droptarget‘);

function handleEvent(event) {
    var info = ‘‘,
    output = document.getElementById(‘output‘),
    data,
    xhr,
    files,
    i,
    len;

    EventUtil.preventDefault(event);

    if(event.type == ‘drop‘) {
        data = new FormData();
        files = event.dataTransfer.files;
        i = 0;
        len = files.length;

        while(i < len) {
            data.append("file" + i, files[i]);
            i ++;
        }

        xhr = new XMLHttpRequest();
        xhr.open("post","FileUpload.php",true);
        xhr.onreadystatechange = function() {
            if(xhr.readyState == 4) {
                alert(xhr.responseText);
            }
        };
        xhr.send(data);
    }
}

EventUtil.addHandler(droptarget, ‘dragenter‘, handleEvent);
EventUtil.addHandler(droptarget,‘dragover‘,handleEvent);
EventUtil.addHandler(droptarget, ‘dragover‘,handleEvent);

我们这里创建一个formData对象,与每个文件对应的键分别是file0,file1,file2,这样的格式。注意不用写额外的代码,只要传入File对象即可。 扫码加群,每日更新一篇前端技术文章一起成长。

预览

原文地址:https://www.cnblogs.com/bbqq1314/p/12545495.html

时间: 2024-10-08 10:58:07

使用XHR上传文件要不要了解一下?的相关文章

关于ajax分段上传文件实例~

本来打算写的勤快一点的,谁知道最近好忙啊,忙着应聘的事情,这里突然想提一下自己的历程 自己现在是一只大三狗,高中三年是玩过去了,上了一所省内普通的不能再普通的二本.不过在大学里还算的上勤奋,大一上在学生会搅搅水,大一下就开始在学校网络中心里面干活,网络维护是工作,编程是兴趣,基本上每天网络中心寝室两点一线,所以说还算得上勤奋.不过现在我自己算是明白,很多事情不是勤奋就好了的,方法不对,真的是事倍功半.自己之前学习东西都是瞎倒腾,看书,看视频,记笔记,写demo.看起来稀疏平常,但是自己缺点在于太

php 下 html5 XHR2 + FormData + File API 上传文件

FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormData的最大优点就是我们可以异步上传一个二进制文件. 例1如下: <!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>

不带插件 ,自己写js,实现批量上传文件及进度显示

今天接受项目中要完成文件批量上传文件而且还要显示上传进度,一开始觉得这个应该不是很麻烦,当我在做的时候遇到了很多问题,很头疼啊. 不过看了别人写的代码,自己也测试过,发现网上好多都存在一些问题,并不是自己想要的.然后自己查阅各种资料,经过自己总结,最终完成了这个功能. 如果大家有什么问题可以提出来,一起交流,学习.有什么不对的地方也指出来,我也虚心学习.自己也是刚写博客,您们的赞是我写博客的动力,谢谢大家. 条件:我采用struts2,java ,ajax,FormData实现; 1.实现的逻辑

spring mvc + xmlHttpRequest2.0 实现无刷新上传文件,带进度条和剩余时间

1.springmvc支持文件上传,需要在spring-mvc.xml配置文件中加上下面的一段话: <!-- 支持上传文件 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> 2.下面介绍下XMLHttpRequest2.0 最早,微软在IE 5引进了这个接口.因为它太有用,其

上传文件

上传文件 1.Form表单上传 接下来我们使用HTML标签来创建文件上传表单,以下为要注意的点: form表单 method 属性必须设置为 POST 方法 ,不能使用 GET 方法. form表单 enctype 属性需要设置为 multipart/form-data. enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码.默认地,表单数据会编码为 “application/x-www-form-urlencoded”.就是说,在发送到服务器之前,所有字符都会进行编码(空格转换

简述三种异步上传文件方式

 很久没写过博客了! 上次写已经是去年的12月了,离现在也有足足三个月了.这几个月因为要搭建个人网站以及准备个人简历,包括最近要准备最近的各大公司的实习春招,很难抽时间来写博客,这次的异步文件上传我觉得是很有必要了解的,笼络了很多知识点,因此准备写一篇博客来巩固下. 异步上传文件是为了更好的用户体验,是每个前端必须掌握的技能.这里我提出三点有关异步文件上传的方式. 使用第三方控件,如Flash,ActiveX等浏览器插件上传. 使用隐藏的iframe模拟异步上传. 使用XMLHttpReques

input(file)异步上传文件

页面 <input id="file" name="file" type="file"><button id="btn" type="button">上传</button> //异步上传文件var $file = $('#file');$('#btn').click(function() { var data = new FormData(); data.append('

webapi上传文件

必须组件 jquery.min.js和jquery.form.js <div class="demo"> <p>说明:示例中只允许上传gif/jpg格式的图片,图片大小不能超过500k.</p> <div class="btn"> <span>添加附件</span> <input id="fileupload" type="file" name=&q

原生API实现拖拽上传文件实践

功能: 拖拽上传文件.图片,上传的进度条,能够同时上传多个文件. 完整的demo地址:https://github.com/qcer/FE-Components/tree/master/QDrag 涉及到的API: 1.HTML5的拖拽事件:dragenter,dragover,drop等 2.XMLHttpRequest  Level2 3.FormData 4.(扩展:HTML5的File API) 概述: 1.利用拖拽实践的API将一个普通的div自定义成一个放置目标,这里有一个技巧是放置