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

越南做It网站推广网络营销平台有哪些?

越南做It网站推广,网络营销平台有哪些?,给人做时时彩网站建设犯法,宁波高端品牌网站建设1.Upload上传组件功能: 文件校验 : 文件格式校验/文件大小校验/上传文件总个数校验 相关功能 : 拖拽功能/上传到远程(七牛)/文件删除及下载 2.组件效果展示: 3.疑难点及解决方案: Promise.all多文件并行上传到远程(七牛云): (1)在beforeUpload钩子函数中获取token (2)循环fi…

1.Upload上传组件功能:

  •   文件校验 :

        文件格式校验/文件大小校验/上传文件总个数校验

  •   相关功能 :

         拖拽功能/上传到远程(七牛)/文件删除及下载

2.组件效果展示:

3.疑难点及解决方案:

  Promise.all多文件并行上传到远程(七牛云):

 (1)在beforeUpload钩子函数中获取token

 (2)循环fileList文件列表,使用fetch将所有文件上传到七牛,并将结果包装成Promise return出去

 (3)待所有文件上传成功后,通过Promise.all获取并存储结果,并通过useEffect及时将七牛返回的结果添加到fileList文件列表中。

 (4)注:由于一次上传多个文件时,beforeUpload钩子函数会执行多次,需要使用debounce进行防抖。

const [promiseAllResult, setPromiseAllResult] = useState<UploadFile[]>([]);const beforeUpload: UploadProps["beforeUpload"] = (file, fileList) => {debouncedBeforeUpload(fileList);return false;
};const debouncedBeforeUpload = debounce(async fileList => {...const res = await getQiniuTokenApi();const uploadPromises = fileList.map(async (file: any) => {return new Promise((resolve, reject) => {const formData = new FormData();formData.append("file", file);formData.append("token", res.data?.upToken || "");fetch("https://upload.qiniup.com/", {method: "POST",body: formData}).then(response => {if (response.status === 200) {return response.json().then(data => {// 返回包含文件信息和响应数据的对象resolve({uid: file.uid,url: "https://" + res.data?.domain + "/" + data.key + "?attname=" + file.name,filePreviewUrl: "https://" + res.data?.domain + "/" + data.key});}).catch(() => {reject(new Error("Upload failed"));});} else {reject(new Error("Upload failed"));}}).catch(error => reject(error));});});Promise.all(uploadPromises).then(res => {setPromiseAllResult(res);message.success("文件上传成功");}).catch(() => message.error("文件上传失败"));
});useEffect(() => {if (promiseAllResult && promiseAllResult.length > 0 && fileList && fileList.length > 0) {fileList.forEach(item => {const findResult = promiseAllResult.find(file => file.uid === item.uid);if (findResult) {// @ts-ignoreitem.filePreviewUrl = findResult.filePreviewUrl;item.url = findResult.url;}});}
}, [promiseAllResult]);

4.完整代码:

  • 封装文件上传组件:

      src/component/Upload/index.tsx:

import { forwardRef, useImperativeHandle, useState, useEffect } from "react";
import { Upload, message } from "antd";
import { InboxOutlined } from "@ant-design/icons";
import type { UploadFile, UploadProps } from "antd";
import { getQiniuTokenApi } from "@/api/modules/assetManagement";
import { debounce } from "lodash";
const { Dragger } = Upload;
interface UploadComType {maxCount?: number;accept?: string[];size?: number;multiple?: boolean;
}
const UploadCom = forwardRef(({maxCount = 3,accept = [".doc",".docx",".xml","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/pdf","image/png","image/jpeg"],size = 2,multiple = true}: UploadComType,ref: any) => {const [fileList, setFileList] = useState<UploadFile[]>([]);const [promiseAllResult, setPromiseAllResult] = useState<UploadFile[]>([]);useEffect(() => {if (promiseAllResult && promiseAllResult.length > 0 && fileList && fileList.length > 0) {fileList.forEach(item => {const findResult = promiseAllResult.find(file => file.uid === item.uid);if (findResult) {// @ts-ignoreitem.filePreviewUrl = findResult.filePreviewUrl;item.url = findResult.url;}});}}, [promiseAllResult]);useImperativeHandle(ref, () => ({getFileList: () => {return fileList;},parentSetList: (list: UploadFile[]) => {setFileList(list);}}));const onRemove = (file: UploadFile) => {const list = fileList.filter(item => item.uid !== file.uid);setFileList(list);};const beforeUpload: UploadProps["beforeUpload"] = (file, fileList) => {debouncedBeforeUpload(fileList);return false;};const debouncedBeforeUpload = debounce(async fileList => {let newFileList = fileList.filter((file: any) => {// 上传中的文件不进行校验if (file.status === "uploading") return true;// 校验文件类型const isFileTypeValid = accept.includes(file.type || "");if (!isFileTypeValid) {message.error(`${file.name} 不是允许的文件类型`);return false;}// 校验文件大小const isFileSizeValid = (file.size || 0) <= size * 1024 * 1024;if (!isFileSizeValid) {message.error(`${file.name} 超过最大文件大小限制 (${size}MB)`);return false;}return true;});if (newFileList.length === 0) {message.warning("没有符合要求的文件可上传");return false;}const res = await getQiniuTokenApi();const uploadPromises = newFileList.map(async (file: any) => {return new Promise((resolve, reject) => {const formData = new FormData();formData.append("file", file);formData.append("token", res.data?.upToken || "");fetch("https://upload.qiniup.com/", {method: "POST",body: formData}).then(response => {if (response.status === 200) {return response.json().then(data => {// 返回包含文件信息和响应数据的对象resolve({name: file.name,size: file.size,uid: file.uid,type: file.type,status: file.status,url: "https://" + res.data?.domain + "/" + data.key + "?attname=" + file.name,filePreviewUrl: "https://" + res.data?.domain + "/" + data.key});}).catch(() => {reject(new Error("Upload failed"));});} else {reject(new Error("Upload failed"));}}).catch(error => reject(error));});});Promise.all(uploadPromises).then(res => {setPromiseAllResult(res);message.success("文件上传成功");}).catch(() => message.error("文件上传失败"));});const handleChange: UploadProps["onChange"] = ({ fileList }) => {let newFileList = fileList;if (newFileList.length > maxCount) {message.warning(`最多可上传${maxCount}个文件`);newFileList = newFileList.slice(-maxCount);}setFileList(newFileList);};const uploadProps: UploadProps = {name: "file",onRemove,beforeUpload: beforeUpload,multiple: multiple,onChange: handleChange,accept: accept.join(",")};return (<div><Dragger {...uploadProps} fileList={fileList}><p className="ant-upload-drag-icon"><InboxOutlined /></p><p className="ant-upload-text">Click or drag file to this area to upload</p><p className="ant-upload-hint">Support for a single or bulk upload. Strictly prohibited from uploading company data or other banned files.</p></Dragger></div>);}
);
export default UploadCom;
  • 使用文件上传组件:
import UploadCom from "@/components/Upload/index";const uploadComRef = useRef<any>(null);<UploadCom ref={uploadComRef} />//获取组件中的文件
const file = uploadComRef.current?.getFileList();//给组件中的文件赋初始值
uploadComRef.current?.parentSetList(files);

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

相关文章:

  • 网站建设第一步怎么弄公司网站建设价格
  • 做请帖网站三只松鼠软文范例500字
  • 重庆网站如何做推广seo的工作内容
  • 专业网站建设最权威网站播放视频速度优化
  • 品牌网站建设h5竞价sem托管
  • 起名网站怎么做nba排名最新
  • 网站建设设计书收录查询站长工具
  • 唐山市里做网站的永久免费的建站系统有哪些
  • ui基础教程入门整站优化排名
  • 公司网站建设一定要求原图吗网站快速排名公司
  • 网络推广合作聊城seo整站优化报价
  • 专业网站制作公司案例在线制作网站免费
  • 福州台江区网站建设女生学电子商务后悔了
  • 阿里云怎样做商城式网站最近的重要新闻
  • 莱芜雪野湖介绍推广seo公司
  • logo设计网站排行榜惠州seo关键词
  • 关于网站建设的博客市场营销七大策略
  • 宠物网站设计模板网络营销平台有哪些
  • 漳州做网站六六六博大a优网上培训机构
  • 苏州做网站套路骗企业网站怎么推广
  • 上海wordpress百度seo刷排名工具
  • 武汉理工大学学分制教务管理系统独立站seo优化
  • 哪些网站可做矿机期货站长之家ping
  • wordpress文章背景颜色宁波seo关键词排名优化
  • 分析建设网站的可行性分析和业务多一样的平台
  • it运维体系小程序seo
  • 深圳哪些公司需要做网站网络营销策略分析方法
  • 兰州网站推广公司怎么优化一个网站
  • flash网站制作工具湖人最新消息
  • 沈阳网站建设q479185700棒推广项目的平台