首页 > 其他分享 >js文件分片上传

js文件分片上传

时间:2023-10-09 18:37:40浏览次数:35  
标签:文件 js let file 分片 上传 size

写在前面
今天我们写一下关于js的分片上传,因为工作中很多时候上传文件是比较大的,为了不让卡死,我们可以使用分片上传的方式进行文件的传输,下面就简单的将思路梳理一下,然后贴上代码

思路分析
既然是分片上传,那么首先要知道不分片的时候是怎么上传的,我们一般是直接使用file文件然后将其放到formData对象中,作为参数上传,这是最基本的一种方式,分片其实就是将这一个整体的操作进行多次,每一次的数据量根据我们的定义进行分,也就是说,假设一个文件的大小是10Mb,我们将其分为十份,每一份都按照前面所的完整的上传过程进行上传,然后循环十次即可将全部的都上传结束,这是我们的基本思路,下面我们贴上代码分析一下

源代码实现

const size = 10000 //分片大小
const url = 'https://httpbin.org/post' // 上传的url
/**
* @function fragmentAtionUpload 分片上传
* @params file 上传的文件
* @params cbUrl 上传的回调函数
* @params size 分片的大小
*/
let fragmentAtionUpload = async (file = '', cbUrl, size = 1) => {
for (let i = 0; i < file.size; i += size) {
let chunk = file.slice(i, i + size)
let formData = new FormData()
formData.append('frmgmentData', chunk)
await cbUrl(formData)
}
}
/**
* @function cbUrl 分片上传回调函数
* @params fileData 上传的文件
*/
let cbUrl = (fileData) => {
fetch(url, {
method: 'post',
body: fileData
}).then(data => {
return data.text()
}).then(res => {
// 这里获取到的就是每一片的真实数据,可以进行下载展示
console.log(res)
})
}
// 文件操作上传
let uploadByFragment = () => {
let file = document.getElementById('file').files[0]
fragmentAtionUpload(file, cbUrl, size)
}

 

<input type="file" id="file" οnchange="uploadByFragment()">

 

代码分析
如上所示,我们首先声明了一个函数进行传递文件,url和分片的大小,回调函数就做一件事,就是上传,他不管上传的大小,所以我们在循环的时候反复调用这个函数即可,最后是文件操作的函数就不多说了,总体来说最基本的分片上传还是比较简单的。

问题分析
这里有一个比较致命的问题,就是因为是分片上传,所以文件是被切成了一段一段的,那么就意味着如果上传的过程中因为网络或者别的原因中断了,那么问题就比较严重了,你可以选择重新上传,但是因为前面的一些片段已经上传上去了,但是因为不是一个完整的整体,所以基本上就是脏数据,想要解决这个问题就需要使用断点续传,就是假设上传中断了以后,我们可以在中断的我位置继续进行上传,这样可以解决这个问题

参考文章:http://blog.ncmem.com/wordpress/2023/10/09/js%e6%96%87%e4%bb%b6%e5%88%86%e7%89%87%e4%b8%8a%e4%bc%a0/

欢迎入群一起讨论

 

 

标签:文件,js,let,file,分片,上传,size
From: https://www.cnblogs.com/songsu/p/17752653.html

相关文章

  • nodejs之常用命令
    node控制台命令#新建文件夹mkdirname#清空控制台clearclr#跳转到指定目录cdname(目录名)#返回上一级cd..#移除指定文件rm文件名name#重命名renamesrc/index.htmlsrc/index.pug#清除缓存:cnpmcacheclean--forces#结束退出ctrl+c#......
  • httpclient上传图片(multipart/form-data)
    stringboundary=string.Format("----WebKitFormBoundary{0}",DateTime.Now.Ticks.ToString("x"));MultipartFormDataContentcontent=newMultipartFormDataContent(boundary);content.Headers.ContentType=Me......
  • js实现分片上传
    代码贴过来就能用<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport......
  • c# json操作
    使用JavaScriptSerializer需要在引用中添加System.Web.ExtensionsusingSystem.Web.Script.Serialization;classUpdateInfo{publicstringpackageUrl;publicstringremoteManifestUrl;publicstringremoteVersionUrl;publicstringversion;pu......
  • js实现电子白板
    功能:使用画笔绘制笔迹(线条)、橡皮檫 <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>js实......
  • 原生js面试题
    一、深拷贝和浅拷贝-1js的数据类型基本类型和复杂类型-2堆和栈基本类型的值和复杂类型的地址存在栈中,复杂类型的地址指向堆中的内存-3深拷贝和浅拷贝的概念深拷贝的前提是复杂类型的复制-4举例说明 如果有个变量a和一个变量b如果a是一个对象......
  • 泛微OA e-office平台uploadify.php任意文件上传漏洞
    0x01漏洞描述泛微e-office系统是标准、易用、快速部署上线的专业协同OA软件,国内协同OA办公领域领导品牌,致力于为企业用户提供专业OA办公系统、移动OA应用等协同OA整体解决方案。泛微OAe-office平台uploadify.php处存在任意文件上传漏洞,攻击者通过漏洞可以获取服务器权限。 ......
  • js实现文件分片上传
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>文件分片上传</title></head&......
  • js函数,js对象
    1定义一个函数21.functionfuctionName(参数1,参数2){3//要执行的代码4return要返回的结果5}6782.varfunctionName=function(a,b)91011ES6箭头函数:(...)=>{...}12arr.forEach((e)=>{13console.log(e);14})基础对象模......
  • WebForm后端调用前端JS
    /*注意:定义的js方法一定要放在head里面,不能放下面,否则不生效*/<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="WebForm1.aspx.cs"Inherits="WebFormBackEndCallFrontJsDemo.WebForm1"%><!DOCTYPEhtml><htmlxmlns=&qu......