js教程

Vue文件切片上传,file对象的slice使用方法

我的站长站 2022-12-28 人阅读

1. file对象介绍

size 表示二进制对象的大小

type 表示二进制对象的类型

slice 方法 分割文件

2. file.slice介绍

第一个参数startByte表示文件起始读取Byte字节

第二个参数则是结束读取字节

文件切片上传

// 文件切片大小定为1MB

let idx = 1;
const bytesPerPiece = 1 * 1024 * 1024;
let startBytes = idx * bytesPerPiece;
let endBytes = startBytes + bytesPerPiece;
if (endBytes > file.size) {
endBytes = file.size;
}

2.切割文件

// 切割文件,file对象的slice方法,文件分片的核心方法

const chunk = file.slice(startBytes, endBytes);

3.定义form对象

let params = new FormData();
params.set("chunk", idx);
params.set("chunks", totalPieces);
params.set("size", file.size);
params.set("name", file.name);
params.set("plupload", chunk);

4.请求后台

// post请求 postForm 为自定义的form表单请求方法

postForm('url', params).then((res) => {

// 根据后端返回是否完成

if (true) {
return res;
}
// 递归上传
this._uploadBig(file, ++idx);
})

5.全部代码

/**
* @param {Object} file 文件
* @param {Number} idx 当前分片
* @return {Object}
*/
uploadBig(file, idx) {
// 文件切片大小定为1MB
const bytesPerPiece = 1 * 1024 * 1024;
let startBytes = idx * bytesPerPiece;
let endBytes = startBytes + bytesPerPiece;
if (endBytes > file.size) {
endBytes = file.size;
}
const totalPieces = Math.ceil(file.size / bytesPerPiece)
// 全部上传完毕后退出
if(startBytes >= file.size) { 
return false;
}
// 切割文件,file对象的slice方法,文件分片的核心方法
const chunk = file.slice(startBytes, endBytes);
// 定义form对象
let params = new FormData();
params.set("chunk", idx);
params.set("chunks", totalPieces);
params.set("size", file.size);
params.set("name", file.name);
params.set("plupload", chunk);
// post请求 postForm 为自定义的form表单请求方法
postForm('url', params).then((res) => {
// 根据后端返回是否完成
if (true) {
return res;
}
// 递归上传
this._uploadBig(file, ++idx);
})
}
相关推荐
  • 上传文件
  • 分片上传
  • nginx宝塔面板上传文件环境配置方法

    在使用nginx系统的宝塔面板开发上传或下载文件功能时,需要首先要配置下载nginx或PHP的参数。否则上传下载大文件时,总是报错,上传小一点的文件,就不报错。修改nginx配置打开nginx管理界面,看到“性能调整”,主要修改连接超时、最大上传文件大小,其他的也可...

    宝塔面板 55 1年前
  • DISCUZ升级后不显示“选择文件上传”按钮

    小编自己的discuz论坛由于不是最新版本,每次登陆论坛都会频繁的有升级提示,这次由于小编手贱了一下下,点击了升级flash player 14。最终导致小编的论坛中就再也看不到:选择文件上传“那个按钮了,图片添加到帖子内容中上方没有:选择文件上传”。这个解决方...

    discuz教程 384 7年前
  • 宝塔面板修改PHP文件上传大小
    宝塔面板修改PHP文件上传大小

    宝塔面板修改PHP文件上传大小很简单,直接打开宝塔面板WEB端进入软件商店选择已经安装且正在使用的PHP版本号点击设置->配置文件搜索post_max_size修改后面的值(自己需要多少就改成多少,切勿过大,防止...

    宝塔面板 378 3年前
  • 大文件分片上传 / 下载限速解决方案

    分片上传将需要上传的文件按照一定的分割规则,分割成相同大小的数据块;初始化一个分片上传任务,返回本次分片上传唯一标识;按照一定的策略(串行或并行)发送各个分片数据块;发送完成后,服务端根据判断数据上传是否完整,如果完整,则进行数据块合成得到原始文件。...

    php教程 39 1年前
  • HTML5实现大文件分片上传

    上传大文件一直是个比较头疼的问题,一是上传时间长,中途一旦出错会导致前功尽弃;二是服务端配置复杂,要考虑接收超大表单和超时问题,如果是托管主机没准还改不了配置,默认只能接收小于4MB的附件。比较理想的方案是能够把大文件分片,一片一片的传到服务端,再...

    js教程 20 1年前
  • php+ajax大文件分片上传示例代码

    代码思路PHP在上传超大的文件时,不能只让后端PHP上传,会容易上传到一半内测益处失效。需要前端要和后端相互配合一起来处理,文件上传要使用ajax的方法,而不是form的submit的方式。前端把file文件对象按一定的大小分割成一定大小的文件(如按2M或5M来分割),对...

    php教程 43 1年前
最新更新
  • js截取字符串教程

    slice()方法接受两个参数,起始索引和结束索引(可选)。它返回从起始索引到结束索引(不包括结束索引)之间的子字符...

    js教程 2个月前
  • find findIndex indexOf索引选择器使用方法

    find使用方法find方法是ES6引入的一种数组方法,可以用来查找数组中符合条件的元素。语法是:array.find(callba...

    js教程 3个月前
  • js复制网页内容教程

    Async Clipboard API方法HTML5新增的方法,无需引入第三方插件,直接就可以复制内容。低版本的浏览器可能会不兼...

    js教程 3个月前
  • js获取字符长度函数分享

    js获取字符长度函数function objLen(str) { if (str == null) return 0; if (typeof str != "string") { ...

    js教程 3个月前
  • 网站LED跑马灯效果广告代码

    网站可以看到很多的论坛网站都会用到这种网站LED跑马灯效果,这种效果实现也很简单,分享给大家。LED跑马灯效果...

    js教程 4个月前