当前位置: 首页 > wzjs >正文

深圳网站制作网站建设百度关键词排名查询工具

深圳网站制作网站建设,百度关键词排名查询工具,青州网站设计公司,学编程的基础要具备什么在前端开发中,断点续传是指在上传文件时,如果上传过程中中断(如网络断开、页面刷新等),可以从断点处继续上传,而不是重新上传整个文件。这种功能在大文件上传场景中非常有用。 以下是实现断点续传的思路和具…

在前端开发中,断点续传是指在上传文件时,如果上传过程中中断(如网络断开、页面刷新等),可以从断点处继续上传,而不是重新上传整个文件。这种功能在大文件上传场景中非常有用。
以下是实现断点续传的思路和具体步骤:

实现思路

文件分片:

将大文件分割成多个小文件块(chunk)。
每个文件块单独上传。

记录上传进度:

使用本地存储(如 localStorage)或服务端记录已上传的文件块。

断点续传:

在上传前检查已上传的文件块,跳过已上传的部分。
从未上传的部分开始继续上传。

合并文件:

所有文件块上传完成后,通知服务端合并文件。

实现步骤

1. 前端实现

以下是基于 React 和 Axios 的断点续传实现示例:

import React, { useState, useRef } from "react";
import axios from "axios";const chunkSize = 1024 * 1024; // 每个文件块的大小(1MB)const FileUpload = () => {const [file, setFile] = useState(null);const [progress, setProgress] = useState(0);const fileInputRef = useRef(null);// 处理文件选择const handleFileChange = (e) => {const selectedFile = e.target.files[0];setFile(selectedFile);};// 上传文件const handleUpload = async () => {if (!file) return;const totalChunks = Math.ceil(file.size / chunkSize); // 总文件块数let uploadedChunks = 0; // 已上传的文件块数// 检查已上传的文件块const uploadedChunksFromStorage = JSON.parse(localStorage.getItem(file.name) || []);for (let i = 0; i < totalChunks; i++) {// 如果当前文件块已上传,跳过if (uploadedChunksFromStorage.includes(i)) continue;const start = i * chunkSize;const end = Math.min(start + chunkSize, file.size);const chunk = file.slice(start, end); // 获取文件块const formData = new FormData();formData.append("file", chunk);formData.append("fileName", file.name);formData.append("chunkIndex", i);formData.append("totalChunks", totalChunks);try {await axios.post("/upload", formData, {headers: { "Content-Type": "multipart/form-data" },});// 更新已上传的文件块uploadedChunksFromStorage.push(i);localStorage.setItem(file.name, JSON.stringify(uploadedChunksFromStorage));// 更新上传进度uploadedChunks++;setProgress(Math.round((uploadedChunks / totalChunks) * 100));} catch (error) {console.error("上传失败", error);return;}}// 所有文件块上传完成后,通知服务端合并文件try {await axios.post("/merge", { fileName: file.name });alert("上传完成");localStorage.removeItem(file.name); // 清除本地存储的上传记录setProgress(0);fileInputRef.current.value = ""; // 清空文件输入} catch (error) {console.error("文件合并失败", error);}};return (<div><h1>文件断点续传</h1><input type="file" onChange={handleFileChange} ref={fileInputRef} /><button onClick={handleUpload}>上传</button><div>上传进度: {progress}%</div></div>);
};export default FileUpload;

2. 服务端实现

服务端需要支持文件块的上传和合并。以下是一个简单的 Node.js 实现示例:

const express = require("express");
const multer = require("multer");
const fs = require("fs");
const path = require("path");const app = express();
const upload = multer({ dest: "uploads/" });// 上传文件块
app.post("/upload", upload.single("file"), (req, res) => {const { fileName, chunkIndex } = req.body;const chunkPath = path.join("uploads", `${fileName}-${chunkIndex}`);// 将文件块保存到临时目录fs.renameSync(req.file.path, chunkPath);res.send({ message: "文件块上传成功" });
});// 合并文件块
app.post("/merge", (req, res) => {const { fileName } = req.body;const chunksDir = path.join("uploads");const chunks = fs.readdirSync(chunksDir).filter((file) => file.startsWith(fileName)).sort((a, b) => a.split("-")[1] - b.split("-")[1]);// 创建可写流const writeStream = fs.createWriteStream(path.join("uploads", fileName));// 合并文件块chunks.forEach((chunk) => {const chunkPath = path.join(chunksDir, chunk);const readStream = fs.createReadStream(chunkPath);readStream.pipe(writeStream, { end: false });readStream.on("end", () => {fs.unlinkSync(chunkPath); // 删除已合并的文件块});});writeStream.on("finish", () => {res.send({ message: "文件合并成功" });});
});app.listen(3000, () => {console.log("服务端运行在 http://localhost:3000");
});

关键点解析

文件分片:

使用 File.slice() 方法将文件分割成多个块。
每个块单独上传。

记录上传进度:

使用 localStorage 记录已上传的文件块索引。
上传前检查已上传的文件块,跳过已上传的部分。

断点续传:

如果上传中断,重新上传时从未上传的文件块开始。

合并文件:

所有文件块上传完成后,通知服务端合并文件。
服务端按顺序读取文件块并写入目标文件。

http://www.dtcms.com/wzjs/279405.html

相关文章:

  • 武汉软件开发公司有哪些天津seo排名扣费
  • 微信公众号做推送的网站买卖友情链接
  • 网站怎么做才能上百度首页百度竞价官网
  • 天河商城网站建设搜索引擎网址有哪些
  • 印象网站建设线上营销推广方式
  • 枣阳网站建设等服务直播引流推广方法
  • phpcms v9怎么做网站全网整合营销推广方案
  • 无锡企业网站商品促销活动策划方案
  • 东莞市长安镇网站制作优化常州百度推广公司
  • 云软件网站建设百度指数代表什么意思
  • 国外做网站被动收入被国家禁止访问的网站怎么打开
  • 比亚迪新能源汽车秦搜索引擎优化方法有哪些
  • 电影网站app怎么做最新的国际新闻
  • 福建省两学一做网站做百度推广的网络公司广州
  • 电脑上如何做网站企业百度推广
  • 高校网站建设要点广州seo代理计费
  • 网站在线提交询盘系统 能直接发到邮箱谷歌在线浏览器入口
  • 老河口市建设局网站禁止搜索引擎收录的方法
  • 邯郸网站建设好的公司seo文章范文
  • 企业网站优化操作国外推广都是怎么推广
  • 河南省城乡和建设厅网站网络广告营销的特点
  • 网站建站历史电商推广和网络推广的策略
  • 做任务领积分兑换别的网站上的会员云南网站推广公司
  • 请问大连谁家做网站安徽网络推广
  • 涞源网站建设seo免费自学的网站
  • 找国内外贸公司的网站微信软文范例大全100
  • 网站域名都需要备案吗黄山seo
  • 深圳网站程序开发制作企业推广视频
  • 好的结构设计网站网站注册
  • 做地方的门户网站网站优化软件