码迷,mamicode.com
首页 > Web开发 > 详细

go bigfile (文件传输管理系统)前端分片上传demo

时间:2019-10-08 12:21:47      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:cal   def   orm   result   UNC   rpc   har   demo   path   

BIGFILE Github地址: https://github.com/bigfile/bigfile 欢迎大家前来issue & star 

BIGFILE 中文文档地址https://learnku.com/docs/bigfile/1.0 

BIGFILE基本介绍

Bigfile 是使用 Golang 开发的一个文件传输管理系统,支持通过 HTTP APIRPC 调用以及 FTP 客户端管理文件。它构建于许多优秀的开源项目之上,基于数据库实现了一个虚拟的文件组织系统,在 Bigfile 中您可以看到熟悉的文件夹和文件,这种实现方式也是我们权限控制的基础。在底层,Bigfile 将任何文件切分成 1 MB 的文件块存储, 我们称之为 Chunk ,每个 Chunk 依据 sha256 算法计算 Hash 值相互区分,相同的 Chunk 只会被存储一次。

 

这里放一个前端http 方式上传文件的demo

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>upload</title>
    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
  </head>
  <body>
    <input type="file" name="file" id="file" />
    <button id="upload" onClick="upload()">upload</button>
    <script type="text/javascript">
      function randomString() {
        var chars =
          0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
        var result = ‘‘
        for (var i = 32; i > 0; --i)
          result += chars[Math.floor(Math.random() * chars.length)]
        return result
      }
      function getFileType(filePath) {
        var startIndex = filePath.lastIndexOf(.)
        if (startIndex != -1)
          return filePath.substring(startIndex, filePath.length).toLowerCase()
        else return ‘‘
      }
      var bytesPerPiece = 1024 * 1024 // 每个文件切片大小定为1MB .
      var totalPieces
      //发送请求
      async function upload() {
        var blob = document.getElementById(file).files[0]
        var start = 0
        var end
        var index = 0
        var filesize = blob.size
        var filename = blob.name
        var token = 978f57c67f9c271e3ce78b9f1176aae4
        var t = new Date()

        //计算文件切片总数
        totalPieces = Math.ceil(filesize / bytesPerPiece)
        let randFileName =
          /asset/ +
          t.getFullYear() +
          / +
          t.getMonth() +
          / +
          t.getDate() +
          randomString() +
          getFileType(filename)
        while (start < filesize) {
          end = start + bytesPerPiece
          if (end > filesize) {
            end = filesize
          }
          var chunk = blob.slice(start, end) //切割文件
          var sliceIndex = blob.name + index
          var formData = new FormData()
          formData.append(file, chunk, filename)
          formData.append(path, randFileName)
          formData.append(nonce, randomString())
          formData.append(token, token)
          formData.append(append, start != 0)
          formData.append(size, end - start)

          let res = await $.ajax({
            url: http://localhost:10985/api/bigfile/file/create,
            type: POST,
            cache: false,
            data: formData,
            processData: false,
            contentType: false
          })
          console.log(res)
          start = end
          index++
        }
      }
    </script>
  </body>
</html>

文件分片方法参考:https://www.cnblogs.com/sghy/p/9143955.html

go bigfile (文件传输管理系统)前端分片上传demo

标签:cal   def   orm   result   UNC   rpc   har   demo   path   

原文地址:https://www.cnblogs.com/zjhblogs/p/11634567.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!