• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【原创】go语言学习(九)指针类型发布时间:2022-07-10
下一篇:
GO类型相同发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap