Sean
Sean
看了半天还是不理解你的“直传”是什么意思。拿阿里云举例子,必须向阿里云的指定api发送http请求才能上传数据,alist服务端有所有的逻辑。你用浏览器上传到alist,或者用跨存储复制等等,最后都是alist需要调用那些阿里的上传api才能把数据传上去。你理解了这个之后你就会发现没有什么“直传”, 因为上传的逻辑写在alist里面,所以要想上传速度快你就把alist部署在快的网络环境中就好了。(我看你写的家用宽带上行是15m/s 这个速度很好了,你在家庭网络内部部署alist就好了) 另: 下一个版本的alist已经优化上传,某些网盘上传可以不生成临时文件,而且某些网盘之间可以秒传
我理解你的意思了,但 1. 极少数网盘支持token下发后通过客户端“直传”,alist客户端暂时只有浏览器,浏览器实现需要一定量的改动。 2. 部分存储alist的上传逻辑是可以断点续传的(切片分段上传),用了浏览器“直传”后很难做断点续传,秒传更是不可能的。 3. 浏览器“直传” 并没有太大意义,唯一的意义在于alist服务跑在上传带宽很低的外网。而大多数人的使用场景是部署在带宽很高的外网或者家庭内网,“直传”没有任何帮助 所以alist为极少数网盘添加一个浏览器“直传”功能需要一定的开发,让上传变得更复杂,而且受众用户很少。鉴于目前alist没有良好的客户端支持,所以个人建议是让alist跑在高带宽外网或者家庭内网
你说的很多网盘支持网页上传的“直传”是调用他们内部的上传接口,即使有更稳定的内部接口,这种方式传输大文件也往往会有问题,所以网盘也基本上推荐使用他们的平台客户端去上传。我大概看了下,只有s3和阿里云有这种api设计供“直传”,其他的都不行,例如百度盘支持2gb以下的直接上传,但是需要access token。 浏览器现在也支持对文件流进行高级处理了(包括hash),但是需要精通前端的人去实现相关代码。总体来说,这个需求太小众,需要的改动也太大。 另下个版本跨存储秒传已经实现了,这是alist的目标。因为这是个大众的需求,对大家分享电影等数据很方便,减少上传等待,对于网盘商也能促进一点销量,属于共赢的场景
https://pkg.go.dev/archive/zip#NewReader zip来说似乎只要有io.ReaderAt实现就可以快速列目录和文件,似乎代码改动不大
由于目前alist的代码没有做流操作的size判断,很容易产生不完整文件。 我后面会给task加入 自动重试,断点续传,完整性判断。 新功能会展示在https://github.com/seanhe26/alist-private-cloud