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

拟定一个农产品电商网站的建设需求实体店100个营销策略

拟定一个农产品电商网站的建设需求,实体店100个营销策略,店面门头设计网站,企业门户网站免费模板先说场景: 用户上传一个视频,但可能因为网络波动或视频较大浏览器的处理偶尔出错,导致上传失败或中断时,可以点击重试,自动接着刚刚上传到的位置继续上传,这就是断点续传。 实现效果: 页面结构…

先说场景:

用户上传一个视频,但可能因为网络波动或视频较大浏览器的处理偶尔出错,导致上传失败或中断时,可以点击重试,自动接着刚刚上传到的位置继续上传,这就是断点续传。

实现效果:

页面结构:

第一部分:

上传进度提示:上传中+进度条,上传成功,上传失败+重试

<div class="loading" v-if="progressShow"><div class="progress-demo"><div class="progress-content"><div class="progress-content-des"><div class="progress-content-des-title" v-if="uploadRes === 0">上传中</div><div class="progress-content-des-title" v-else-if="uploadRes === 1"><tiny-icon-successful /><div style="color: #09aa71;">上传成功</div></div><div class="progress-content-des-title" v-else-if="uploadRes === 2"><tiny-icon-fail /><div style="color: #f56c6c;">上传失败</div><tiny-button type="success" @click="artUploadRetry(checkpoint, upload_file)">重试</tiny-button></div><div class="progress-content-des-title" v-else>上传进度</div></div><tiny-progress class="progress" type="line" :percentage="percentage" :stroke-width="12" /></div></div>
</div>

 样式部分可以根据实际情况进行调整,这里不过多赘述:

.progress-demo {display: flex;
}.progress-content {flex: 1;
}.progress-content-des {display: flex;justify-content: space-between;margin-bottom: 8px;
}.progress-content-des-title {display: flex;align-items: center;justify-content: left;height: 20px;line-height: 20px;font-size: 14px;
}.progress :deep(.tiny-progress__text) {font-size: 12px !important;
}.tiny-icon-successful {fill: #09aa71;margin-right: 4px;
}.tiny-icon-fail {fill: #f56c6c;margin-right: 4px;
}

第二部分:

上传按钮,视频预览

<tiny-button @click="uploadArt" :disabled="uploadDisabled">作品上传</tiny-button><div v-if="video_url" class="video-preview-container"><video class="preview-video" controls :src="video_url" />
</div>

变量定义:

const percentage = ref(0)
const uploadRes = ref(4)
const uploadDisabled = ref(false)
const video_url = ref('')
let checkpoint = null

核心函数:

第一部分:

设置oss上传的入参,checkpoint为断点,partSize为分片大小,parallel为并发数: 

const commonUpload = async (c_p, file) => {try {uploadRes.value = 0return await client.multipartUpload(object_name, file, {parallel: 2,partSize: 1024 * 1024,checkpoint: c_p,timeout: 120000,progress: (per, cp, res) => {percentage.value = Number((per * 100).toFixed(2))checkpoint = cp}})} catch (err) {console.log(err)uploadRes.value = 2uploadDisabled.value = falsereturn null}
}

第二部分:

视频上传校验及上传进度展示(代码关键位置可查看注释)

const uploadArt = () => {const inputFile = document.createElement('input')inputFile.type = 'file'inputFile.accept = 'video/*'inputFile.multiple = falseinputFile.addEventListener('change', async (event) => {const files = event.target.filesif (!files || files.length === 0) returnconst file = files[0]if (!file.name.endsWith('.mp4') && !file.name.endsWith('.mov')) {Modal.message({status: 'error',message: '请上传.mov或.mp4格式的视频!',duration: 3000})return}if (file.size > 300 * 1024 * 1024) {Modal.message({status: 'error',message: '视频不能大于300MB!',duration: 3000})return}upload_file.value = file // 存储当前这个文件,为了后面断点续传使用filevideo_url.value = '' // 重置视频地址progressShow.value = trueuploadDisabled.value = trueuploadRes.value = 0 // 重置视频上传状态percentage.value = 0 // 重置进度条状态checkpoint = null // 重置断点const ext = file.name.split('.').pop()await getToken(ext) // 获取桶信息const res = await commonUpload(checkpoint, file) // 调用OSS上传if(res) {video_url.value = window.sessionStorage.getItem("video_url") // 这里是从OSS处获取存储到sessionStorage里面的(后端返回的数据)uploadRes.value = 1uploadDisabled.value = false} else {uploadRes.value = 2uploadDisabled.value = false}});inputFile.click();
}

关于代码中,getToken()和OSS的封装在前面的文章有提到,文章地址:

实现视频分片上传 OSS_delphi7如何将视频上传到oss-CSDN博客 

这里对这部分代码进行贴图:

第三部分:

重试函数:通过存储的断点位置调用 commonUpload 继续上传,这里不要再次调用getToken(),因为会重新获取到桶信息,用之前的才可以继续上传,否则会导致与之前的桶信息不一致而报错。

const artUploadRetry = async (c_p, file) => {const res = await commonUpload(c_p, file)if(res) {video_url.value = window.sessionStorage.getItem("video_url")uploadRes.value = 1uploadDisabled.value = false} else {uploadRes.value = 2uploadDisabled.value = false}
}

其他一:

这里如果想测试上传失败,可以用浏览器自带的网络限制,可以自定义网速:

 

点击 Add 即可自定义,填写内容如下:

其他二:

如果是上传图片或者其他小文件,没用到 OSS,也想给用户展示上传进度,可以写一个方法:

const getTimer = () => {uploadRes.value = 0percentage.value = 0process.value = setInterval(() => {if (percentage.value < 95) {percentage.value += 5} else {clearInterval(process.value)}}, 1000)
}

在小于95%之前会每秒+5%, 在上传的方法中,获取到上传成功结果之后将 percentage.value = 100 即可,如果上传失败不需要将 percentage.value = 0。比如:

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

相关文章:

  • 建网站可以赚钱吗东莞疫情最新情况
  • 关于网站建设广告词seo推广任务小结
  • 宽城网站制作建设网官方网站
  • 只做黑白摄影的网站站长统计幸福宝2022年排行榜
  • 安康有建网站的公司吗百度指数网址
  • 网站平台建设实训体会百度关键词搜索怎么弄
  • wordpress红酒主题深圳搜索引擎优化seo
  • 找兼职做酒店网站北京网站优化价格
  • 男的女的做那个视频网站关键字排名优化工具
  • 广西执业药师培训网站营销的目的有哪些
  • 酒店网站建设栏目分析酒店营销推广方案
  • 代理记账包含哪些业务新乡seo顾问
  • 微信企业网站淘宝seo
  • 小零件加工在家做最优化方法
  • 一键做网站百度知道首页网
  • 国家企业信用信息公示系统辽宁广州谷歌优化
  • 做关于灯饰的网站推广形式
  • 兰州新区城乡建设局网站电商运营数据六大指标
  • c2c模式成功案例分析网站seo优化技能
  • 购买服务器做网站百度推广做二级域名
  • 网站建设服务协议书关键词优化快速
  • 福建微网站建设价格苏州seo关键词优化排名
  • 上海住房城乡建设网站品牌策划的五个步骤
  • 源码建站和模板建站区别seo公司系统
  • 网站开发 为什么要用缩略图网站推广优化流程
  • 怎么看网站哪个公司做的信息流优化师简历模板
  • 做民宿的网站今晚比赛预测比分
  • 广州网站推广找哪里网页制作平台有哪些
  • 怎么把自己做的网站传网上宁波seo推荐推广平台
  • 合肥做淘宝网站建设2022好用值得推荐的搜索引擎