首页 > 其他分享 >前端大文件上传/分片上传

前端大文件上传/分片上传

时间:2024-07-08 20:30:16浏览次数:16  
标签:文件 const chunk 前端 file 分片 上传 formData

前置知识

  1. File对象:表示一组文件,我们使用<input type="file" /> 去选择文件时,这些文件就被存储在File对象中。

  2. Blob对象:表示二进制数据,常用于存储大型数据对象(如图像、音频等)。File对象是Blob对象的一个子类,它继承了Blob对象的所有属性和方法。

  3. formData对象:前端先将文件存储在formData当中,才能传输给后端。

点击查看代码
<!DOCTYPE html>
<html lang="en">

<body>
    <div class="container">
        <h1>大文件上传</h1>
        <input type="file" id="fileInput" accept="image/*">
        <button id="uploadButton">切片上传</button>
        <br>
    </div>
    <script>
        //chunk就是一个切片,也就是小文件
        async function uploadChunk (chunk) {
            const formData = new FormData()
            formData.append('fileName', 'test.jpg') // 这里会在上传时候加上
            formData.append('file', chunk)

            //这里的地址可以替换为你的后端地址
            const response = await fetch('https://file.io', {
                method: 'POST',
                body: formData
            })

            const result = await response.json()
            return result
        }

        document.getElementById('uploadButton').addEventListener('click', async function () {
            const fileInput = document.getElementById('fileInput')
            const file = fileInput.files[0]
            const chunkSize = 100 * 1024 // 100KB
            const totalChunks = Math.ceil(file.size / chunkSize)

            for (let i = 0; i < totalChunks; i++) {
                const start = i * chunkSize
                const end = Math.min(start + chunkSize, file.size)
                const chunk = file.slice(start, end)
                //上传一个切片
                const result = await uploadChunk(chunk)

            }
        });
    </script>
</body>

</html>

大文件上传 核心就是 File.Slice()方法,对文件进行切割,将大文件切割成一个个小文件,然后交给后端

踩坑:

这样获取出来的files是一个fileList,需要手动取出第0个,才是具体的file对象

var input = document.getElementById("fileInput")
var files = input.files

参考:https://blog.csdn.net/wtswts1232/article/details/130663725

标签:文件,const,chunk,前端,file,分片,上传,formData
From: https://www.cnblogs.com/HugoKwong/p/18290549

相关文章

  • 网络安全——文件上传漏洞
    目录一、文件上传漏洞概述二、文件上传漏洞原因三、常见绕过上传技术四、实战模拟PASS1(绕过JS)PASS2(绕过contnet-type)PASS3(绕过黑名单)PASS4(htaccess重写解析绕过)PASS5(黑名单大小写绕过)PASS6(空格绕过)PASS7(windows系统特征绕过)PASS8(NTFS交换数据流::$D......
  • 导师怀疑我的毕设前端不是自己写的!我把前端模版开发的过程甩他脸上了!
    耗时一个月开发的OJ在线判题系统,文末有项目地址,目前还在更新代码~现在让我们来自主开发打造一套前端开发项目模版文章目录确认环境初始化image.pngvscode格式化配置Prettier引入组件库项目通用布局实现新建基础布局BasicLayout新建导航菜单栏导航菜单路由实现栅格组件......
  • python使用flask框架生成excle返回前端(包含图片、表格、表头灰色、表格加边框)
    python使用flask框架生成excle文档,文档中包含图片和表格,其中表格要包含图片、表格、表头灰色、表格加边框,照片和表格不重叠。逻辑:获得图片的高度,根据高度计算表格从第几行开始插入。效果图:代码:importopenpyxlfromopenpyxl.stylesimportPatternFillfromopenpyxl.d......
  • 前端面试题30(闭包和作用域链的关系)
    闭包和作用域链在JavaScript中是紧密相关的两个概念,理解它们之间的关系对于深入掌握JavaScript的执行机制至关重要。作用域链作用域链是一个链接列表,它包含了当前执行上下文的所有父级执行上下文的变量对象。每当函数被调用时,JavaScript引擎会创建一个新的执行上下文,其中......
  • 前端面试题29(js闭包和主要用途)
    JavaScript中的闭包是一个非常强大的特性,它允许一个函数访问并操作其词法作用域之外的变量。闭包的形成主要依赖于函数的作用域链,即函数可以访问在其外部定义的变量,即使外部函数已经执行完毕。下面我会通过几个方面来帮助你理解闭包的概念:闭包的定义闭包是一个函数及其......
  • 前端面试题28(Vue3的Teleport功能在什么场景下特别有用?能给个例子吗?)
    Vue3的Teleport功能在需要将组件的渲染结果放置在DOM树中与当前组件位置无关的任意位置时特别有用。这通常涉及到需要将某些UI元素(如模态框、弹出菜单、通知、工具提示等)从其逻辑上的父级组件中“提取”出来,放置到页面的更高层级或完全不同的位置,以避免样式冲突或层......
  • 前端面试题27(在实际项目中,如何有效地利用Vue3的响应式系统提高性能?)
    在实际项目中,有效利用Vue3的响应式系统提高性能主要涉及以下几个关键点:1.合理使用reactive和refreactive:用于将复杂的数据结构(如对象或数组)转换成响应式版本。确保只将需要实时更新的数据结构声明为响应式,避免不必要的全局响应化,以减少性能开销。ref:用于创建基本类型......
  • SpringBoot返回文件让前端下载的几种方式
    0x01背景在后端开发中,通常会有文件下载的需求,常用的解决方案有两种:不通过后端应用,直接使用nginx直接转发文件地址下载(适用于一些公开的文件,因为这里不需要授权)通过后端进行下载,同时进行一些业务处理本篇主要以方法2进行介绍,方法2的原理步骤如下:读取文件,得到文件的字节流......
  • 前端面试基础html/js/css
    一、css1.说一下css盒子模型CSS盒子模型(BoxModel)是CSS中用于描述元素尺寸和布局的一个重要概念。它定义了元素的内容、内边距、边框、外边距和高度的计算方式。盒子模型对于网页布局和响应式设计至关重要。在CSS中,每个元素都可以被视为一个盒子,这个盒子由内容(content)、......
  • web前端热门面试题一
    JavaScript中的数据类型有哪些?并谈谈它们在存储上的差别。JavaScript中的数据类型及存储差别数据类型JavaScript中的数据类型主要可以分为两大类:基本数据类型(也称为原始数据类型)和引用数据类型。具体分类如下:基本数据类型Number:数字类型,包括整数和浮点数。JavaScript内......