go bigfile (文件传输管理系统)前端分片上传demo
BIGFILE Github地址: https://github.com/bigfile/bigfile 欢迎大家前来issue & star
BIGFILE 中文文档地址:https://learnku.com/docs/bigfile/1.0
BIGFILE基本介绍
Bigfile 是使用 Golang 开发的一个文件传输管理系统,支持通过 HTTP API,RPC 调用以及 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的更多相关文章
- vue+element+oss实现前端分片上传和断点续传
纯前端实现: 切片上传 断点续传 .断点续传需要在切上上传的基础上实现 前端之前上传OSS,无需后端提供接口.先上完整代码,直接复制,将new OSS里的参数修改成自己公司OSS相关信息后可用,如遇问 ...
- 阿里云OSS分片上传DEMO
分片传输规则 1.不能超过10000片,2.每片必须大于100KB using System; using System.Collections.Generic; using System.Compo ...
- 30分钟玩转Net MVC 基于WebUploader的大文件分片上传、断网续传、秒传(文末附带demo下载)
现在的项目开发基本上都用到了上传文件功能,或图片,或文档,或视频.我们常用的常规上传已经能够满足当前要求了, 然而有时会出现如下问题: 文件过大(比如1G以上),超出服务端的请求大小限制: 请求时间过 ...
- php实现大文件上传分片上传断点续传
前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...
- PHP大文件分片上传
前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...
- plupload 大文件分片上传与PHP分片合并探索
最近老大分给我了做一个电影cms系统,其中涉及到一个功能,使用七牛云的文件上传功能.七牛javascript skd,使用起来很方便,屏蔽了许多的技术细节.如果只满足与调用sdk,那么可能工作中也就没 ...
- js+php大文件分片上传
1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...
- shutil模块和几种文件上传Demo
一.shutil模块 1.介绍 shutil模块是对os中文件操作的补充.--移动 复制 打包 压缩 解压 2.基本使用 1. shutil.copyfileobj(文件1, 文件2, 长度) 将文件 ...
- 前端利用webuploader实现超大文件分片上传、断点续传
本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...
随机推荐
- Generative Adversarial Nets(GAN Tensorflow)
Generative Adversarial Nets(简称GAN)是一种非常流行的神经网络. 它最初是由Ian Goodfellow等人在NIPS 2014论文中介绍的. 这篇论文引发了很多关于神经 ...
- HMM 传统后向算法
HMM 传统后向算法,已实现,仅供参考. package jxutcm.edu.cn.hmm.model; import jxutcm.edu.cn.hmm.bean.HMMHelper; impor ...
- 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消(C)”按钮以防损坏
---恢复内容开始--- 解决办法:打开放此台Vmware虚拟机虚拟磁盘文件及配置文件存放的位置(也就是弹出提示窗口上的路径),删除后缀为.lck的文件夹 ---恢复内容结束---
- JS 循环遍历 总结
一.循环遍历语句 for...in... (ES5) 语法:javascript for(keys in obj){} 适用:遍历对象 说明: 1.keys表示obj对象的每一个键值对的键(键名),所 ...
- Java并发编程实战 第5章 构建基础模块
同步容器类 Vector和HashTable和Collections.synchronizedXXX 都是使用监视器模式实现的. 暂且不考虑性能问题,使用同步容器类要注意: 只能保证单个操作的同步. ...
- Mysql定时器定时删除表数据
由于测试环境有张日志表没定时2分钟程序就狂插数据,导致不到1一个月时间,这张日志表就占用了6.7G的空间,但是日志刷新较快,有些日志就没什么作用,就写了个定时器,定期删除这张表的数据 首先先查看mys ...
- webpack4基础配置
网页中常见的静态资源: js: .js .jsx .coffee .ts(TypeScript 类 C# 语言) css: .css .less .sass .scss Images: .jpg .p ...
- springboot 配置quart多数据源
Springboot版本为2.1.6 多数据源配置使用druid进行配置,数据库使用的为Oracle11g,如果使用的是MySQL,直接将数据库的地址和驱动改一下即可 <parent> & ...
- 微信小程序-饮食日志_开发日志
针对假期作业为父母或者身边的人做一款“小软件”这个课题,由于对 android 开发不熟悉 ,所以决定做一款微信小程序. 项目名称:饮食管理日志 目的:身边的人群对摄入食物热量及消耗不清楚,对健康需求 ...
- Codeforces Round #569 (Div. 2) C. Valeriy and Deque
链接: https://codeforces.com/contest/1180/problem/C 题意: Recently, on the course of algorithms and data ...