首页 > 其他分享 >js实现大文件分片上传的方法

js实现大文件分片上传的方法

时间:2023-10-22 11:11:20浏览次数:28  
标签:end js start blob file 分片 var 上传 filesize

借助js的Blob对象FormData对象可以实现大文件分片上传的功能,关于Blob和FormData的具体使用方法可以到如下地址去查看
FormData 对象的使用
Blob 对象的使用
以下是实现代码,本例中后端代码使用php来实现,只是演示基本功能,具体一些文件验证逻辑先忽略。
前段代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>upload</title>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<input type="file" name="file" id="file">
<button id="upload" onClick="upload()">upload</button>
<script type="text/javascript">
var bytesPerPiece = 1024 * 1024; // 每个文件切片大小定为1MB .
var totalPieces;
//发送请求
function upload() {
var blob = document.getElementById("file").files[0];
var start = 0;
var end;
var index = 0;
var filesize = blob.size;
var filename = blob.name;

//计算文件切片总数
totalPieces = Math.ceil(filesize / bytesPerPiece);
while(start < filesize) {
end = start + bytesPerPiece;
if(end > filesize) {
end = filesize;
}

var chunk = blob.slice(start,end);//切割文件
var sliceIndex= blob.name + index;
var formData = new FormData();
formData.append("file", chunk, filename);
$.ajax({
url: 'http://localhost:9999/test.php',
type: 'POST',
cache: false,
data: formData,
processData: false,
contentType: false,
}).done(function(res){

}).fail(function(res) {

});
start = end;
index++;
}
}
</script>
</body>
</html>

 

后端php代码:

<?php

header('Access-Control-Allow-Origin:*');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

$file = $_FILES['file'];
$filename = $file['name'];
file_put_contents($filename, file_get_contents($file['tmp_name']), FILE_APPEND);

 

参考文章:http://blog.ncmem.com/wordpress/2023/10/22/js%e5%ae%9e%e7%8e%b0%e5%a4%a7%e6%96%87%e4%bb%b6%e5%88%86%e7%89%87%e4%b8%8a%e4%bc%a0%e7%9a%84%e6%96%b9%e6%b3%95-2/

欢迎入群一起讨论

 

标签:end,js,start,blob,file,分片,var,上传,filesize
From: https://www.cnblogs.com/songsu/p/17780115.html

相关文章

  • 原生JS实现大文件分片
    为了实现断点续传,研究了js的文件分片实现断点续传的步骤文件分片按顺序上传,上传第一个后文件名md5加密保存到rdis的key,value保存为上传的index,然后下面每次上传成功就更新对应的value,保持最新的第一次上传时,查询redis是否已经存在相同的key,如果相同就跳到保存的index的下一......
  • Vue.js框架:vue3版本引入使用element-ui
    一、引入element-pluselement-ui只支持vue2,vue3需要引入element-plus进行使用,两个分别对应vue2和3两个版本,各自独立,无法跨级兼容。地址:https://element-plus.gitee.io/在vue3项目终端里使用以下命令引入该依赖:npminstallelement-plus--save二、修......
  • nodejs 安装升级解决导入es6语法兼容性问题??=
    nodejs无法识别??==的问题是因为nodejs的版本太老,而引入的模块中包含了新的语法,例如空值运算符??=。这样nodejs就会报错。解决方法大概有三个1,找到对应老版本的模块使用。2,修改模块中不兼容的语法。3,更新nodejs。三个方法中前两个显然会面临大量工作。作为懒人的我,选择了方......
  • Python-Json异常:Object of type Decimal is not JSON serializable
    源起:使用python分离出一串文本,因为是看起来像整数,结果json转换时发生异常:TypeError:ObjectoftypeDecimalisnotJSONserializablemsgInfo={"uid":3232324232}json.dumps(msgInfo,ensure_ascii=False)原因:decimal格式不能被json.dumps正确处理。json.dumps函数发现字......
  • js逆向·找到登录时目标网站的加密算法的几种方式
    js逆向·找到登录时目标网站的加密算法的几种方式为什么要去找到目标网站的加密密码方法:为了要把我们的payload正确的带入目标网站的服务器进行逻辑验证,那么就需要知道对方使用的什么加密或者编码规则来处理数据的,比如说我们输入的密码被base64编码了,然后发送给后端,后端会进行解......
  • php js + laravel + mysql开发的手术麻醉临床信息系统源码
    手术麻醉临床信息系统有着完善的临床业务功能,能够涵盖整个围术期的工作,能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施,能够规范麻醉科的工作流程,实现麻醉手术过程的信息数字化,自动生成麻醉的各种医疗文书,完成共享HIS、LIS、PACS和EMR等手术患者信息,从而提......
  • MinIO实现文件上传与下载
    引入依赖<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>7.1.0</version></dependency> 工具类 MinIoUtils@AutowiredSiMinIoP......
  • js 大文件切片,中止上传,上传进度,断点续传
    大文件切片上传背景介绍:当涉及大文件上传时,一种有效的方法是将大文件分割成小切片并逐个上传。这种技术不仅可以减轻服务器的负担,还可以避免上传过程中的中断和内存问题。本文将介绍如何使用JavaScript实现大文件切片上传,并解释如何处理断点续传、并发控制以及上传取消等问题,用到......
  • java项目实践-jsp-finter-监听器-day19
    目录1.jsp2.过滤器3.listener监听器1.jspservle逻辑处理方便html页面表现麻烦jsp页面表现方便但是逻辑处理麻烦JSP是一种页面技术JSP本质上是servlet类通过JSP引擎翻译成servletjsp约等于java+html注意:jsp不是访问静态的html文件index.jsp修改成如下代码:<%-......
  • json序列化数据超出最大值(maxJsonLength)
    https://www.cnblogs.com/ellafive/p/13704301.html 1、序列化:以下代码在对象过大时会报错:进行序列化或反序列化时出错。字符串的长度超过了为maxJsonLength属性设置的值。//jsonObj比较大的时候会报错varserializer=newJavaScriptSerializer();returnserializer.Ser......