图片和视频的上传(文件上传通用)

这篇具有很好参考价值的文章主要介绍了图片和视频的上传(文件上传通用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

流程如下:
1、先引入el-upload
2、调用上传前事件
3、上传前事件中将file文件转formData
4、调用后端oss接口上传文件
5、上传完成后回显数据
6、点击图片/视频预览


图片和视频的上传(文件上传通用)

<el-upload class="upload-demo" action="" :file-list="fileList"  :before-upload="beforeAvatarUpload">
    <el-button icon="el-icon-upload" size="small" type="primary">
        上传
    </el-button>
</el-upload>

beforeAvatarUpload为文件上传前的操作,该方法中会携带一个参数filefile就是当前上传的文件,我们需要用new FormData()转为file文件格式,调用后端接口上传图片。

beforeAvatarUpload(file) {
     let formData = new FormData();
     formData.append('file',file)
     // 调用oss后端接口
    ossUpload(formData).then(el=>{
       // 上传成功后的回调:el,该参数内的url就是http的访问地址,将该方法存储到回显的数据中
     this.upload(el.data)
    }).catch(err=>{console.log(err)})
      
},
 upload(val) {
    // 此处可以校验上传的格式,如果视频格式不是mp4则会提示
   if(val.fileSuffix != ".mp4"){
       return this.$message.error('视频格式不正确')
    }
   // console.log(11111,val,val.fileSuffix)
   this.dataList.push({
     fiParentId: this.parentId,
     fvEstateType: this.info.fvEstateType,
     fiTaskType: this.info.fiTaskType,
     fvUrl: val.url,
     fiType: "",
     fvName: "",
     fvRemark: "",
     fiSort: 0,
     id: 0
   })
}

图片的上传也是一样的,此时图片上传和视频上传的一般流程就结束了,页面列表中遍历dataList即可回显数据。

关于图片点击放大回显

点击列表图片,通过作用域插槽将图片的url地址保存到dialogImageUrl中,在弹框中即可回显。

<!-- 图片 -->   
<el-dialog :visible.sync="dialogVisible" width="80%" top="1%">
      <img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>

视频的回显方式相同

<el-dialog :visible.sync="dialogVisible" width="80%" top="1%">
  <video
        :src="dialogVideoUrl"
        controls
        autoPlay
        preload="auto"
        width="100%"
        height="1000px"
      >
   </video>
</el-dialog>

在这里需要注意的是,这种方法只适用于单张图片或小视频文件的上传,大文件并不适合,大文件的上传需要考虑数据切片,以及断点续传。

在这里提一下数据切片的思路,我们上传文件时会有一个文件大小,比如一个文件有1MB大小,我们一次只上传600kb,那么切片的文件大小就是600kb,在上传的时候将计算文件大小 1MB / 600kb 向上取整 = 2,切片数量就是2,在通过循环切片上传,每次上传一个切片,当所有切片上传完时,任务结束。


下面提一下断点续传:

实现断点续传(断点下载)

实现断点续传(断点下载)可以提高文件下载的效率和稳定性,特别对于大文件或不稳定的网络环境更为重要。以下是前端实现断点续传的一般步骤:

1、支持服务器端:首先,确保服务器端支持断点续传。服务器应当能够处理带有Range和Content-Range头部的请求,并能够正确返回指定区间的数据。

2、计算上次下载进度:在前端,需要记录上次下载的进度,以便在断点续传时从上次断开的地方继续下载。可以使用localStorage或sessionStorage来存储上次下载的进度。

3、发起下载请求:在前端,通过创建一个XMLHttpRequest对象或使用fetchAPI来发起下载请求。同时,设置Range头部,指定下载的起始位置。

4、接收响应:当服务器响应下载请求时,获取响应的状态码和响应头部信息。如果状态码为 206(Partial Content),表示服务器支持断点续传,并且返回了指定区间的数据。如果没有响应206状态码,则需要重新从头开始下载。

5、保存已下载的数据:在接收到响应后,将返回的数据保存下来。可以使用Blob或ArrayBuffer对象来保存二进制数据。

6、更新下载进度:在接收到每个数据块后,更新下载进度。可以通过计算已下载的数据大小和总文件大小的比例来表示下载进度,并将其显示在用户界面上。

7、保存断点信息:在每次下载进度更新时,同时将已下载的数据大小和总文件大小保存到本地存储中,以便下次继续下载时使用。

8、处理下载完成:当下载完成时,根据需要进行相应的操作,例如保存文件、提示用户下载完成等。

9、处理下载错误:在下载过程中可能会发生网络错误或其他问题,需要通过错误处理机制来处理这些情况。可以监听XMLHttpRequest对象的onerror事件或使用catch方法捕捉fetchAPI的错误,并根据需要进行相应的处理和重试操作。

断点续传原文链接:https://blog.csdn.net/weixin_55846296/article/details/131455411

element tree组件连接线以及懒加载 (👈点击直达)
再也不用担心组件跨层级的数据共享和方法驱动了 (👈点击直达)
前端换肤,聊一聊主题切换那些事(👈点击直达)
echarts数据可视化-动态折线堆积图 (👈点击直达)
vue3使用百度地图(👈点击直达)

如果觉得这篇文章对你有帮助,欢迎点赞👍、收藏💖、转发✨哦~文章来源地址https://www.toymoban.com/news/detail-719538.html

到了这里,关于图片和视频的上传(文件上传通用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于如何通过 postman 发起上传文件的请求,postman上传图片视频

    我们通常会使用 postman 发起请求,测试数据。有些请求将图片,视频等文件上传到服务器,如何通过 postman 实现上传文件呢? 定义请求方式和请求路径 请求体选择 body body 下选择 form-data 在参数中输入 file key 值输入完 file 后,在下拉框中选择 file 此时 value 会显示一个 Select

    2024年02月11日
    浏览(42)
  • vue+springboot 上传文件、图片、视频,回显到前端。

    预览: 视频: 分成两部,1.通过前端将文件的基本信息传送到后端进行储存,返回已储存的文件id,2.再将文件发送到后端储存。 储存文件信息 上传文件对象 这个我放在d盘下面,需要修改映射路径

    2023年04月19日
    浏览(46)
  • vue 集成tinymce2实现图片,视频以及文件的上传

    1. 安装插件 (1)安装tinymce npm install tinymce -S (2)安装tinymce-vue npm install @tinymce/tinymce-vue@3.0.1 -S 2. 复制静态文件到 public 目录 资源下载路径:https://download.csdn.net/download/weixin_44021888/88063970?spm=1001.2014.3001.5503 3. 新建组件:tinymce 注意:如果上传过后的视频,只有一张图片的占位

    2024年02月16日
    浏览(32)
  • 微信小程序上传文件(可传 word、excel、ppt、视频、图片……)

    近期做技术调研时发现微信官方支持文件上传了,这里记录一下 官方 API:wx.chooseMessageFile(Object object) 交互:从微信聊天里选择文件(选一个好友/群聊,从你们聊天记录里的文件里选) 点红框是预览,点右上角圆圈才是选中(昨天做技术调研时点红圈部分是预览,搞得我还以

    2024年02月11日
    浏览(57)
  • unity上传大文件(例如.mp4视频/png图片)优化部分,采用文件流方式

    1.unity客户端     2.服务器端   3.注意: 需要结合上一篇文章,目前亲测可以上传800M的视频,不到6秒还是挺快的!  

    2024年02月16日
    浏览(36)
  • uniApp移动端-H5-微信小程序上传文件(图片,文档和视频等)

    封装了一个插件可直接使用: 插件地址:uniApp移动端-H5-小程序上传文件(图片,文档和视频等),插件可直接用Hbuilderx导入示例项目查看, 实现方法: H5内部是使用uni-app官方内部方法uni.chooseFile 小程序端因hybrid不能使用本地HTML,所以插件提供的是uni-app官方内部方法wx.cho

    2024年02月12日
    浏览(33)
  • vue3 - element-plus 上传各种 word pdf 文件、图片视频并上传到服务器功能效果,示例代码开箱即用。

    在 vue3 项目中,使用 element plus 组件库的 el-upload 上传组件,进行文件、图片图像的上传功能示例。 可直接复制,再改个接口地址。 在这里上传

    2024年02月15日
    浏览(58)
  • 【日常积累】Linux下sftp搭建

    SFTP是Secure File Transfer Protocol的缩写,是安全文件传送协议。可以为传输文件提供一种安全的加密方法。跟ftp几乎语法功能一样。 SFTP是SSH的一部分,是一种传输档案至Blogger伺服器的安全方式。它本身没有单独的守护进程,必须使用sshd守护进程来完成相应的连接操作,所以从某

    2024年02月02日
    浏览(31)
  • 【日常积累】HTTP和HTTPS的区别

    在运维面试中,经常会遇到面试官提问http和https的区别,今天咱们先来简单了解一下。 超文本传输协议HTTP被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就

    2024年02月12日
    浏览(25)
  • 【日常积累】Linux之init系统学习

    Linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化。内核初始化的最后一步就是启动 pid 为 1 的 init 进程,这个进程是系统的第一个进程,它负责产生其他所有用户进程。 init是Linux系统操作中不可缺少的程序之一。 所谓的in

    2024年02月12日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包