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

成都私人视频网站制作平台做商城网站需要什么资质

成都私人视频网站制作平台,做商城网站需要什么资质,wordpress插件 订阅,wordpress评论数据表写在前面#xff1a;在做这个调研时我遇到的需求是前端直接对接亚马逊平台实现文件上传功能。上传视频文件通常十几个G、客户工作环境网络较差KB/s#xff0c;且保证上传是稳定的#xff0c;支持网络异常断点重试、文件断开支持二次拖入自动重传等。综合考虑使用的Aws S3的分… 写在前面在做这个调研时我遇到的需求是前端直接对接亚马逊平台实现文件上传功能。上传视频文件通常十几个G、客户工作环境网络较差KB/s且保证上传是稳定的支持网络异常断点重试、文件断开支持二次拖入自动重传等。综合考虑使用的Aws S3的分段上传功能基于分段的特性在应用层面上实现断点、断网重传功能。  本文主要参考亚马逊中文博客 客户端直连S3实现断点续传思路与实践 AWS api英文官方文档 Class: AWS.S3 — AWS SDK for JavaScript 安装aws-sdk 首先npm安装aws-sdk npm i aws-sdk 引入aws-sdk 使用的时候通过import aws from aws-sdk全局导入 import aws from aws-sdk;配置aws秘钥信息 const secret await getSecret();//调用后端api获取上传配置信息//对接asw需要的配置信息const config {accessKeyId: secret.ak,secretAccessKey: secret.sk,region: secret.regions,};//配置秘钥信息aws.config.update(config);const awsClient new aws.S3(); 上传秘钥、桶、对象key的作用 Bucket: 后端给的相当于文件夹名称,       Key: 通常是上传文件的namefile.name,       Body: 文件本身file 分片/分段上传模式 使用createMultipartUpload方法创建一个多段上传任务并使用uploadPart方法上传单个分片。所有分片上传后手动调completeMultipartUpload方法校验上传任务是否全部完成。 createMultipartUpload创建分段上传任务该方法返回本次上传ID示例 //初始化分片上传 async function initMultiPartUpload(awsClient: any, params: any) {const result await awsClient.createMultipartUpload(params).promise();return result.UploadId; } 在调用uplodPart方法前需要手动对文件进行切片示例 const PartSize 10 * 1024 * 1024; // 10 MBasync function awsUploadPart(fileState: FileState,file: File,uploadId: string,key: string,awsClient: any ) {const count Math.ceil(file.size / PartSize);const uploadPromises [];for (let n 1; n count; n) {const start (n - 1) * PartSize;const end Math.min(start PartSize, file.size) - 1;if (!partNumbers.includes(n)) {const uploadPromise awsClient.uploadPart({Bucket,Key: key,UploadId: uploadId,PartNumber: n,Body: file.slice(start, end 1),}).promise().then((data: any) {completeParts.push({ PartNumber: n, ETag: data.ETag });fileState.percent parseInt((completeParts.length * 100) / count);}).catch((err: any) {fileState.status FileStatus.fail;throw err;});uploadPromises.push(uploadPromise);}}//所有分片上传完成后手动合并Promise.all(uploadPromises).then(() {checkMultiPart(uploadId, completeParts, fileState, key, awsClient);}).catch(() {fileState.status FileStatus.fail;}); } 分片上传完成校验 由于promise异步执行分片派发的顺序和完成的顺序可能不一致而completeMultipartUpload方法接收的已上传分片信息的PartNumber必须是按序排列的因此用排序好的newParts //aws合并分片校验 function completeMultiUpload(uploadId: any,parts: any,fileState: FileState,key: any,awsClient: any,sk: any ) {//分片信息按PartNumber顺序排序const newParts parts.sort((a: any, b: any) a.PartNumber - b.PartNumber);awsClient.completeMultipartUpload({Bucket: sk.bucketName,UploadId: uploadId,MultipartUpload: {Parts: newParts,},Key: key,}).promise().then(() {fileState.status FileStatus.success;fileState.percent 100;}).catch(() {fileState.status FileStatus.fail;}); } 断点重传、二次拖入续传 Aws s3不支持断点续传。需要在应用层面进行相应的处理来实现这个功能。在上传开始时根据文件名key值手动调aws获取历史上传分片信息使用listMultipartUploads和listParts方法获取已上传的部分并使用分段上传方法继续上传剩余的部分。 //获取当前文件是否有已上传断点信息 async function getAwsCheckpoint(key: string,awsClient: any,sk: any ): Promiseany {let uploadId ;let partsInfo;try {const result await awsClient.listMultipartUploads({Bucket: sk.bucketName,Prefix: key,}).promise();if (result.Uploads.length) {uploadId result.Uploads[result.Uploads.length - 1].UploadId; //获取具体分片信息partsInfo await awsClient.listParts({Bucket: sk.bucketName,Key: key,UploadId: uploadId,}).promise();}} catch (err: any) {console.log(err);}return { uploadId, partsInfo }; } 思考如果文件已经全部上传是不是不用调listMultipartUploads和listParts获取分片上传的信息了 使用aws提供的headObject方法先校验文件是否上传未上传headObject方法会抛出错误反之文件已传完。这里的逻辑是文件上传完成后在桶Bucket文件夹下会显示文件未上传或缺失上传分片的将找不到。 因此整个逻辑梳理如下 headObject判断文件是否已存在已存在上传进度100% 文件部分上传--》过滤出已上传的分片这里同个文件多次上传取最近一次的上传记录。将未上传的分片信息上传 从未上传--》初始化分片信息--》分段上传 async function awsRequest(fileState: FileState,file: any,key: string, ) {const secret await getSecret();const config {accessKeyId: secret.ak,secretAccessKey: secret.sk,region: secret.regions,};//配置秘钥信息aws.config.update(config);const awsClient new aws.S3();const params {Bucket: secret.bucketName,Key: key,}; try {//检查文件是否已上传awsClient.headObject(params, async (err: any, data: any) {// 没有上传成功head方法会返回失败if (err) {//检查是否部分上传const { uploadId, partsInfo } await getAwsCheckpoint(key,awsClient,secret);if (uploadId) {//断点续传awsUploadPart(fileState,file,uploadId,partsInfo.Parts,key,awsClient,secret);} else {//初始化文件上传const uploadId await initMultiPartUpload(awsClient, params);awsUploadPart(fileState,file,uploadId,[],key,awsClient,secret);}} else {//data存在上传成功fileState.percent 100;fileState.status FileStatus.success;}});} catch (err: any) {console.log(err);} } 扩展分段上传方法传入已上传的分片信息 async function awsUploadPart(fileState: FileState,file: File,uploadId: string,parts: any,key: string,awsClient: any ) {//已完成的分片const completeParts parts.map((_: any) {return { PartNumber: _.PartNumber, ETag: _.ETag };});const count Math.ceil(file.size / PartSize);const partNumbers parts.map((_: any) _.PartNumber);if (partNumbers.length) {fileState.status FileStatus.processing;fileState.percent parseInt((completeParts.length * 100) / count);}const uploadPromises [];for (let n 1; n count; n) {if (!startTime) {startTime new Date();}const start (n - 1) * PartSize;const end Math.min(start PartSize, file.size) - 1;if (!partNumbers.includes(n)) {const uploadPromise awsClient.uploadPart({Bucket,Key: key,UploadId: uploadId,PartNumber: n,Body: file.slice(start, end 1),}).promise().then((data: any) {completeParts.push({ PartNumber: n, ETag: data.ETag });fileState.percent parseInt((completeParts.length * 100) / count);}).catch((err: any) {fileState.status FileStatus.fail;throw err;});uploadPromises.push(uploadPromise);}}//所有分片上传完成后手动合并Promise.all(uploadPromises).then(() {checkMultiPart(uploadId, completeParts, fileState, key, awsClient);}).catch(() {fileState.status FileStatus.fail;}); } awsRequest方法对文件做了断点续传处理如何在断网后恢复重传呢 可以用定时器监听网络状态同时监听FileStatus是fail失败的文件进行手动重传。 断网重传示例 使用window.navigator.onLine获取网络状态使用定时器定时执行 //添加定时器 const startInterval () {timer.value setInterval(() {if (window.navigator.onLine) {//有网络时主动检测是否有失败的if (failFlag) {startTime null;await awsRequest(fileState, file, key);}}}, 10 * 1000); // 5秒钟单位为毫秒 }; 本文仅对业务逻辑中的部分代码抽离讲解了aws分段上传、重传、重试的方法、具体使用请结合自身的场景进行扩展
http://www.hkea.cn/news/14413925/

相关文章:

  • 怎么做企业网站排名企业所得税的征收方式有
  • 定西市网站建设咨询网站seo课程
  • 建设银行企业网站访问不了免费建企业网站哪个好
  • 在线教育类网站模板网站开发企业培训
  • 婚恋网站开发如归网络营销推广企业
  • 网站的title网络营销策划书论文
  • asp网站开发实例书籍做的网站如何全屏
  • 获取网站浏览者手机号网站开发技术概况
  • 网站开发一般采用什么框架专业的网站建设运营
  • 业务型网站首页网页设计说明万能模板
  • 公司网站建设如何撤销wordpress著名案例
  • 东莞网站优化建设团队app公司网站建设
  • 云南做网站哪家好网站模版设计
  • wordpress搭建企业网站思路江苏省交通建设局网站
  • 深圳模板网站建设公司微信公众好可以上传wordpress
  • 石家庄做商城网站的公司网站搭建费用计入什么科目
  • 制作会员手机网站个人网页设计论文正文
  • 深圳企业网站制作企业百度点击器下载
  • php 网站网页设计与制作教程考试题目
  • 如何做团购网站吉安网站建设优化服务
  • 台州做网站seo的网站推广过程
  • 广东官网网站建设公司网站移动端自适应
  • 深圳腾网站建设北京核心词优化市场
  • 花生壳做局域网站网站建设要做些什么问题
  • 做酒店网站的公司求职seo服务
  • 做外贸哪个网站看外汇网络服务类型及其采用的网络协议
  • 电子商务网站建设的心得网站外包哪家公司好
  • 网站排名北京建设厅网站首页
  • 单页面营销网站宁夏电建网站
  • 国外活动策划网站商城网站功能列表