ajax异步实现文件分片上传实例代码

这篇文章主要给大家介绍了关于ajax异步实现文件分片上传的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

使用Ajax上传文件的应用场景颇多,比如上传用户头像、博客文章中插入图片、对认证用户相关身份进行校验等等很多很多。这篇文章主要介绍了关于ajax异步实现文件分片上传的相关内容,下面话不多说了,来一起看看详细的介绍吧

实例代码:

 
 JS分片上传-极速上传

 
 
 

<script src="

http://libs.baidu.com/jquery/1.8.3/jquery.min.js”>

 $(“#slice”).change(function(event) {
  var file = $(“#slice”)[0].files[0];
  var name = file.name;
    //进行初始化
    $.ajax({
      type:”POST”, //请求方式
     url:”http://localhost:8080/getuploadId”,

      async: false,
      dataType:”json”, //返回数据类型
      data:{//请求参数
        fileName:name,
      },
      success:function(data){ //请求成功后       
       console.log(“data.code=”+JSON.stringify(data));
       console.log(“data.data.objectName=”+data.data.objectName);
       console.log(“data.data.uploadId=”+data.data.uploadId);  
       var objectName=data.data.objectName;
       var uploadId=data.data.uploadId;
       //成功后执行分段上传
       PostFile(file,0,objectName,uploadId);
       //合并
       combineFile(objectName,uploadId);
       
       
       },
      error:function (){
       alert(“系统出现异常!”);
       flag=false;
      }
     });
  
 
 });
 //执行分片上传
 function PostFile(file,i,objectName,uploadId){
  var name = file.name,       //文件名
   size = file.size,       //总大小shardSize = 2 * 1024 * 1024,
   shardSize = 1 * 1024 * 1024,    //以2MB为一个分片,每个分片的大小
   shardCount = Math.ceil(size / shardSize); //总片数
  if(i >= shardCount){
   return;
  }
  //console.log(size,i+1,shardSize); //文件总大小,第一次,分片大小//
  var start = i * shardSize;
  var end = start + shardSize;
  var packet = file.slice(start, end); //将文件进行切片
  // 分段号
  var partNumber = i + 1;
  /* 构建form表单进行提交 */
  var form = new FormData();
  form.append(“fileId”, ‘001’)
  form.append(“data”, packet); //slice方法用于切出文件的一部分
//   form.append(“lastModified”, file.lastModified); //最后的额修改时间
  form.append(“name”, name);
  form.append(“totalSize”, size);
  
  form.append(“uploadId”, uploadId);
  form.append(“objectName”, objectName);
  form.append(“mainFile”, packet);
  form.append(“total”, shardCount);
  form.append(“sortNumber”, partNumber);
  
  //uploadId:uploadId,
  //objectName:objectName,
  //mainFile:blob,
  //total:partCount,
  //sortNumber:partNumber
  
  if(shardCount === i+1){
   shardSize = size – i * shardSize
  }
  form.append(“shardSize”, shardSize);
  form.append(“total”, shardCount); //总片数
  form.append(“index”, i + 1); //当前是第几片
  $.ajax({
   // header: {
   //  web_token: “cpBvqWrr0UK9zPJoKj+412alxxcY6qFwrSVoO0juZg0S1jX/sGfMd9oi3AsSxW+MdWFrwtGCykUTmMqrqpbCElmT75DfB87lENC7lCuMxgF0d5wQB6yAubUVyGOzhbrScvIfD8ZSjOJ3D88AOy2xRd4oG8TxeGoMoZqnqIwjKg=”
   // },
   url:”http://localhost:8080/multipartupload”,

   type: “POST”,
   data: form,
   //timeout:”10000″, //超时10秒
   async: false, //同步
   dataType:”json”,
   processData: false, //很重要,告诉jquery不要对form进行处理
   contentType: false, //很重要,指定为false才能形成正确的Content-Type
   success: function (data) {
    console.log(“data=”+JSON.stringify(data));
    /* 表示上一块文件上传成功,继续下一次 */
    if (data.data.code == 1) {
     form = ”;
     i++;
     PostFile(file, i,objectName,uploadId);
    } else if (data.data.code == 502) {
     form = ”;
     /* 失败后,每2秒继续传一次分片文件 */
     setInterval(function () { PostFile(file, i,objectName,uploadId) }, 2000);
    } else if (data.data.code == 200) {
     console.log(“上传成功”);
    } else if (data.data.code == 500) {
     console.log(‘第’+msg.i+’次,上传文件有误!’);
    } else {
     console.log(‘未知错误’);
    }
   }
  })
 }
 //合并
 function combineFile(objectName,uploadId){
   console.log(“objectName=”+objectName);
   console.log(“uploadId=”+uploadId);
   var object=new Object();
   object.objectName=objectName;
   object.uploadId=uploadId;
    $.ajax({
    
     headers: {
      Accept: “application/json; charset=utf-8”
    },
     type:”POST”, //请求方式
    url:”http://localhost:8080/combine”,

async: false,
     contentType:”application/json”,
     dataType:”json”, //返回数据类型
     data:JSON.stringify(object),
     success:function(data){ //请求成功后       
      console.log(“data=”+JSON.stringify(data));
      console.log(“data.data.code=”+data.data.code);
      console.log(“data.data.url=”+data.data.url);  
     },
     error:function (){
      alert(“系统出现异常!”);
      flag=false;
     }
    });      
 
 
 }
 

总结

到此这篇关于ajax异步实现文件分片上传的文章就介绍到这了,更多相关ajax异步实现文件分片上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:脚本之家

链接:https://www.jb51.net/article/198844.htm

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:SEO优化专员,转转请注明出处:https://www.chuangxiangniao.com/p/897343.html

(0)
上一篇 2025年1月4日 00:56:19
下一篇 2025年1月4日 00:56:59

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Ajax工作原理及优缺点实例解析

    这篇文章主要介绍了Ajax工作原理及优缺点实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.Ajax是什么? 全称是 asynchronous javascript and xm…

    2025年1月4日
    100
  • ajax实现excel报表导出

    利用ajax实现excel报表导出【解决乱码问题】,供大家参考,具体内容如下 背景 项目中遇到一个场景,要导出一个excel报表。由于需要token验证,所以不能用a标签;由于页面复杂,所以不能使用表单提交。初步考虑前端使用ajax,后端返…

    编程技术 2025年1月4日
    100
  • ajax实现简单登录页面

    这篇文章主要为大家详细介绍了ajax实现简单登录页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了ajax实现简单登录页面的具体代码,供大家参考,具体内容如下 一.什么是ajax Aja…

    编程技术 2025年1月4日
    100
  • AJAX实现数据的增删改查操作详解java后台

    这篇文章主要介绍了AJAX实现数据的增删改查操作,结合实例形式详细分析了ajax结合java后台实现数据库增删改查相关操作技巧,需要的朋友可以参考下 本文实例讲述了AJAX实现数据的增删改查操作。分享给大家供大家参考,具体如下: 主页:in…

    2025年1月4日
    100
  • 编写高质量代码的30条黄金守则(首选隐式类型转换)

    这篇文章主要介绍了编写高质量代码的30条黄金守则(首选隐式类型转换),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。 编写高质量代码的30条黄金守则-Day 01(首选隐式类型转换),…

    2025年1月4日
    100
  • vscode一键规范代码格式的实现

    这篇文章主要介绍了vscode 一键规范代码格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。 使用vscode的过程中 自己或者push代码以后 代码的格式可…

    2025年1月4日
    100
  • IDEA中使用Git拉取代码时报 Git pull failed原因及解决方法

    这篇文章主要介绍了IDEA中使用Git拉取代码时报 Git pull failed原因及解决方法,本文给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。 产生原因: 先说一下Git和SVN的区别吧,有助于更…

    2025年1月4日 编程技术
    100
  • VS2019中Git源代码管理实现总结

    这篇文章主要介绍了VS2019中Git源代码管理实现总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。 一、将VS2019中已有的项目与远程库进行连接 0.GitHu…

    2025年1月4日 编程技术
    100
  • Ajax实现登录案例

    这篇文章主要为大家详细介绍了Ajax实现登录案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Ajax登录案例,供大家参考,具体内容如下 Msg package com.lbl.msg; public cl…

    2025年1月4日
    200
  • ajax post下载flask文件流以及中文文件名问题

    这篇文章主要介绍了ajax post下载flask文件流以及中文文件名问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 ajax post下载文件 后端返回文件流,flask中可使用 retur…

    编程技术 2025年1月4日
    200

发表回复

登录后才能评论

联系我们

156-6553-5169

在线咨询: QQ交谈

邮件:253000106@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

联系微信