美文网首页
大文件分块上传

大文件分块上传

作者: _旁观者_ | 来源:发表于2021-12-03 14:15 被阅读0次

大致步骤

  • 1 图片分块
  • 2 分块的图片 用formdata 保存在发后台

代码实现

   <template>
  <el-upload
    class="upload-demo"
    action="00"
    :on-preview="handlePreview"
    :on-remove="handleRemove"
    :before-remove="beforeRemove"
    :on-change = "onchangeHandle"
    multiple
    :limit="3"
    :on-exceed="handleExceed"
    :file-list="fileList"
    :auto-upload="false"
  >
    <el-button size="small" type="primary">Click to upload</el-button>
    <template #tip>
      <div class="el-upload__tip">
        jpg/png files with a size less than 500kb
      </div>
    </template>
  </el-upload>
  <el-progress :percentage="obj.currentLoading" :format="format" />
</template>

<script>
// https://www.jianshu.com/p/08524828f84b
// https://zhuanlan.zhihu.com/p/68271019
// 步骤简述 1图片分割 2formdata 保存数据上传后台  
import {defineComponent, reactive} from 'vue'
import { ElMessage,ElMessageBox } from 'element-plus'
export default defineComponent({
  name: 'HelloWorld',
  props: {
    msg: String
  },
  setup () {
    const fileList = reactive([])
    const obj = reactive({
      currentLoading: 0,
      current: 0
    })
    function handleRemove(file, fileList) {
        console.log(file, fileList)
    }
    function handlePreview(file) {
        console.log(file)
    }
    function handleExceed() {
        ElMessage(
        `www`
        )
    }
    function beforeRemove() {
        ElMessage(`Cancel the transfert of ?`)
    }
    const sliceImg =  (file, piece = 1024 * 1024 * 1) => { // 分割图片
      let totalSize = file.size; // 文件总大小
      let start = 0; // 每次上传的开始字节
      let end = start + piece; // 每次上传的结尾字节
      let chunks = []
      while (start < totalSize) {
        // 根据长度截取每次需要上传的数据
        // File对象继承自Blob对象,因此包含slice方法
        let blob = file.raw.slice(start, end); 
        chunks.push(blob)
        start = end;
        end = start + piece;
      }
      return chunks
    }
    const onchangeHandle = (file, fileList) => {
      console.log(file, fileList)
      let imgData = sliceImg(file)
      let loading = Math.floor(100/imgData.length) // 进度条每次的进度
      let time = imgData.length // 总共要发几次请求
      saveImg(imgData, loading, time, obj)
    }
    const saveImg = (arr, loading, time, obj) => {
      const formData = new FormData()
      const key = 'chunk' + obj.current
      formData.append('chunk', arr[obj.current])
      formData.append('filename', key)
      // 请求接口去
      setTimeout(() => {
        obj.current++
        obj.currentLoading = loading *obj.current
        if (obj.current < time) {
          saveImg(arr, loading, time, obj)
        } else {
          obj.currentLoading = 100
          ElMessageBox.alert('上传成功', '提示', {
            confirmButtonText: '确定',
            callback: () => {
              console.log('成')
            },
          })
        }
      }, 2000)
    }
    return {
        handleRemove,
        handlePreview,
        handleExceed,
        beforeRemove,
        fileList,
        onchangeHandle,
        obj
    }
  }
})
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

相关文章

  • 文件上传下载技术

    上传技术 1.直接上传 2.大文件上传 1)分块上传 主要分块数,快的大小,md5值(秒传实现) 2)断点上传 主...

  • 大文件分块上传

    大致步骤 1 图片分块 2 分块的图片 用formdata 保存在发后台 代码实现

  • php+文件夹上传实例

    核心原理: 该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中...

  • 大文件分块(切片)断点上传

    之前看过相关文章但是一直没有动手实现,这个东西就是为了实现这个而产生的。 前端流程图 主要技术点 切片 利用 Bl...

  • 2019-04-28

    基于nodom框架的大文件上传插件 重新封装了Ajax的post 方法 使用了blob对象的slice 对文件分块...

  • 文件太大如何分块压缩?BetterZip简单搞定!

    为什么大文件需要分块压缩?首先,因为网络传输是存在time-out参数的,部分网站不支持断点续传,当文件上传时间过...

  • 数据库代码 python

    python 插入数据库代码 存储工程学习 1.1python大文件分块下载,文件分块1024=1M 1.2 pa...

  • 分块上传预签名Demo

    分块上传预签名Demo 以下是分块上传的两个步骤 初始化分片上传 获取上传分片的预签名URL 使用该URL可以不带...

  • 记录一次SequenceInputStream引起的栈溢出Sta

    前言 笔者使用http上传大文件,采用分片上传的方式,下把大文件分割成等分的小文件上传到服务器目录再合并到写入大文...

  • Okhttp实现对大文件和视频断点上传

    版权声明:本文为卫伟学习总结文章,转载请注明出处!前言:之前项目需要上传大文件的功能,上传大文件经常遇到上传一半由...

网友评论

      本文标题:大文件分块上传

      本文链接:https://www.haomeiwen.com/subject/zqopxrtx.html