热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

实例讲解javascript实现异步图片上传方法

给大家详细讲解一下如何通过javascript写出异步图片上传,并且把实例代码给大家分享了下,有兴趣的读者们测试一下吧。

我们首先看下HTML代码实现的form提交部分。其中大家在测试的时候需要把test的URL更换成自己的,也可以直接写一个本地地址测试。

html代码:


  
  
  

js代码:

var Fileupload = {
  fileInput: $("#fileImage").get(0),
  dragDrop: $("#fileDragArea").get(0),
  upButton: $("#fileSubmit").get(0),
  url: $("#uploadForm").attr("action"),
  })(),
  //文件上传
  funUploadFile: function() {
   var self = this;
   for (var i = 0, file; file = this.fileFilter[i]; i++) {
    (function(file) {
     var xhr = new XMLHttpRequest();
     if (xhr.upload) {
      // 上传中
      xhr.upload.addEventListener("progress", function(e) {
       self.onProgress(file, e.loaded, e.total);
      }, false);
      // 文件上传成功或是失败
      xhr.Onreadystatechange= function(e) {

      if (xhr.readyState == 4) {
        if (xhr.status == 200) {
         self.onSuccess(JSON.parse(xhr.responseText));
         self.funDeleteFile(file);
         if (!self.fileFilter.length) {
          //全部完毕
          self.onComplete();
         }
        } else {
         self.onFailure(file, xhr.responseText);
        }
       }
      };
      //准备FormData对象
      var myForm = document.getElementById('uploadForm');
      //将文件放入FormData对象中
      formData = new FormData(myForm);

      // 开始上传
      xhr.open("POST", self.url, true);
      xhr.send(formData);
     }
    })(file);
   }
  },
  init: function() {
   var self = this;
   //上传按钮提交
   if (this.upButton) {
    console.log('提示: 当前存储服务器地址', this.url)
    this.upButton.addEventListener("click", function(e) {
     self.funUploadFile(e);
    }, false);
   }
   self.bindEvent();
  }
 };
 Fileupload = $.extend(Fileupload);
 Fileupload.init();

FormData 异步上传文件

一、创建FormData放入待上传文件

//准备FormData对象
var formData = new FormData(),
 uploadFile = document.getElementById('file');
 
//将文件放入FormData对象中 
formData.append('file', uploadFile.files[0]);

二、通过xhr发送FormData数据到服务器,实现文件上传

//创建xhr对象
var xhr = new XMLHttpRequest();

//监听文件上传进度
xhr.upload.Onprogress= function(evt){
 //lengthComputabel: 文件长度是否可计算
 if(evt.lengthComputable){
  //evt.loaded: 已下载的字节数
  //evt.total: 文件总字节数
  var percent = Math.round(evt.loaded*100/evt.total);
  console.log(percent);
 }
}

//监听文件传输开始 
xhr.Onloadstart= function(evt){
  xhr.abort() //终止上传
}

//监听ajax成功完成事件
xhr.Onload= function(evt){
 ...
}

//监听ajax错误事件 
xhr.Onerror= function(evt){
 ...
}

//监听ajax被中止事件
xhr.Onabort= function(evt){
 ...
}

//监听传输结束事件: 不管成功或者失败都会触发
xhr.Onloaded= function(evt){
 ...
}
 
//*发起ajax请求数据
xhr.open('POST', '/url', true);
xhr.send(formData);


推荐阅读
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 在网页开发中,页面加载速度是一个关键的用户体验因素。为了提升加载效率,避免在PageLoad事件中进行大量数据绑定操作,可以采用异步加载和特定控件来优化页面加载过程。 ... [详细]
  • 探讨在循环中调用$.post()时,回调函数为何会在循环结束后才开始执行,并提供解决方案和优化建议。 ... [详细]
  • 深入解析JMeter中的JSON提取器及其应用
    本文详细介绍了如何在JMeter中使用JSON提取器来获取和处理API响应中的数据。特别是在需要将一个接口返回的数据作为下一个接口的输入时,JSON提取器是一个非常有用的工具。 ... [详细]
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
author-avatar
萝莉控穿大鞋的胖胖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有