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的更多相关文章

  1. vue+element+oss实现前端分片上传和断点续传

    纯前端实现: 切片上传 断点续传 .断点续传需要在切上上传的基础上实现 前端之前上传OSS,无需后端提供接口.先上完整代码,直接复制,将new OSS里的参数修改成自己公司OSS相关信息后可用,如遇问 ...

  2. 阿里云OSS分片上传DEMO

    分片传输规则 1.不能超过10000片,2.每片必须大于100KB using System; using System.Collections.Generic; using System.Compo ...

  3. 30分钟玩转Net MVC 基于WebUploader的大文件分片上传、断网续传、秒传(文末附带demo下载)

    现在的项目开发基本上都用到了上传文件功能,或图片,或文档,或视频.我们常用的常规上传已经能够满足当前要求了, 然而有时会出现如下问题: 文件过大(比如1G以上),超出服务端的请求大小限制: 请求时间过 ...

  4. php实现大文件上传分片上传断点续传

    前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...

  5. PHP大文件分片上传

    前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...

  6. plupload 大文件分片上传与PHP分片合并探索

    最近老大分给我了做一个电影cms系统,其中涉及到一个功能,使用七牛云的文件上传功能.七牛javascript skd,使用起来很方便,屏蔽了许多的技术细节.如果只满足与调用sdk,那么可能工作中也就没 ...

  7. js+php大文件分片上传

    1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...

  8. shutil模块和几种文件上传Demo

    一.shutil模块 1.介绍 shutil模块是对os中文件操作的补充.--移动 复制 打包 压缩 解压 2.基本使用 1. shutil.copyfileobj(文件1, 文件2, 长度) 将文件 ...

  9. 前端利用webuploader实现超大文件分片上传、断点续传

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

随机推荐

  1. FPGA开发时钟资源评估需要考虑的问题

    在第一个独立开发的FPGA项目中,使用了Altera平台的三速以太网IP,工作在100M模式下,外部输入的PHY时钟频率为25MHz. 由于在前期没有注意这个外部输入的时钟,导致最后不得不在板子上飞线 ...

  2. SQL函数 Convert,dateadd

    1.SQL中CONVERT转化函数的用法 格式:CONVERT(data_type,expression[,style])说明:此样式一般在时间类型(datetime,smalldatetime)与字 ...

  3. Gym-100814K 数位DP 模拟除法

    Johnny is a brilliant mathematics student. He loves mathematics since he was a child, now he is work ...

  4. poj1419 Graph Coloring 最大独立集(最大团)

    最大独立集: 顶点集V中取 K个顶点,其两两间无连接. 最大团: 顶点集V中取 K个顶点,其两两间有边连接. 最大独立集=补图的最大团最大团=补图的最大独立集 #include<iostream ...

  5. 清北学堂提高组突破营游记day4

    今天主攻图论. 对于这道题,30分做法是暴力搜索全部来判断是否有异样. 对于满分做法,利用带权并查集.? 又带我们串了一边LCA 安利个人LCA博客. spfa代码.原理:循环队列. 然后是floyd ...

  6. java 乱码

    https://blog.csdn.net/qq_27545063/article/details/81138722 https://blog.csdn.net/dachaoa/article/det ...

  7. C的随机数用法

    rand() #include <stdio.h> #include <stdlib.h> int main() { ; i < ; i++) { printf(&quo ...

  8. 购物网站被p.egou.com强制恶意劫持

    今天早上打开电脑浏览京东,发现随便点击商品,都自动转化为淘客推广的页面, 我以为是360浏览器自己干的,然后我换了谷歌,也是一样,难道这是电脑里面有流氓插件? 我又换了火狐,还是一样,没办法了,换IE ...

  9. print和赋值

    赋值 #可同时(并行)给多个变量赋值 x, y, z = 1, 2, 3 #交换多个变量的值 x, y = y, x 序列解包(或可迭代对象解包):将一个序列(或任何可迭代对象)解包,并将得到的值存储 ...

  10. 结合webpack使用vue-router

    demo结构 webpack.config.js var path = require('path'); // const { VueLoaderPlugin } = require('vue-loa ...