peinhu / AetherUpload-Laravel

A Laravel package to upload large files 上传大文件的Laravel扩展包
GNU General Public License v2.0
919 stars 126 forks source link

目前只能保存到本地再上传到OSS!能否跳过本地储存,直接上传到OSS? #66

Closed Dzcyr closed 5 years ago

Dzcyr commented 5 years ago

目前只能保存到本地再上传到OSS!能否跳过本地储存,直接上传到OSS?

peinhu commented 5 years ago

直接使用阿里云OSS的sdk https://github.com/aliyun?utf8=%E2%9C%93&q=&type=&language=php
据我所知也有分片上传功能的 https://help.aliyun.com/document_detail/88477.html?spm=a2c4g.11186623.6.1024.57d55d5bJVudWi
web端获取服务端签名后直接上传不中转 https://help.aliyun.com/document_detail/31926.html?spm=a2c4g.11186623.6.1330.16075d5bvS5mR8

ghost commented 4 years ago

阿里云的分片上传应该并不适合js分片后上传的场景吧?

peinhu commented 4 years ago

看上面最后一个链接

发自我的 iPhone

在 2019年11月16日,15:03,JIANG notifications@github.com 写道:

阿里云的分片上传应该并不适合js分片后上传的场景吧?

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub, or unsubscribe.

ghost commented 4 years ago

看上面最后一个链接 发自我的 iPhone 在 2019年11月16日,15:03,JIANG @.***> 写道: 阿里云的分片上传应该并不适合js分片后上传的场景吧? — You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub, or unsubscribe.

最后一个可以,我指你发的第二个,结合你当前的项目最为合适

peinhu commented 4 years ago

@aaronwu 上传到服务器后再中转上传阿里云,这样多此一举没意义,你如果想使用阿里云oss储存,那直接用第三个链接的方法在前端直传oss就行了。 本扩展不包含阿里云等任何第三方储存的功能,如果你想采取中转再上传的方案,可以自行实现。 另外,这边原则上只解答本扩展的问题,第三方储存的问题我也不是很了解,你可以向阿里云发工单询问,描述你要解决的问题,会有工程师给你解答的。

ghost commented 4 years ago

@aaronwu 上传到服务器后再中转上传阿里云,这样多此一举没意义,你如果想使用阿里云oss储存,那直接用第三个链接的方法在前端直传oss就行了。 本扩展不包含阿里云等任何第三方储存的功能,如果你想采取中转再上传的方案,可以自行实现。 另外,这边原则上只解答本扩展的问题,第三方储存的问题我也不是很了解,你可以向阿里云发工单询问,描述你要解决的问题,会有工程师给你解答的。

首先感谢你的回复,其实也不是说中转,而是我想直接接管了你上传的几个步骤,例如:初始化和上传,拿到请求直接上传到阿里云,这样的话相对你的插件就是个适配层,适配本地和oss等。

peinhu commented 4 years ago

@aaronwu 想法很好,但这个需求很难实现,因为阿里云oss是异步上传,流程是:初始化-上传分片-合并文件,而我这边是同步上传,流程是:初始化-上传分片且合并,我这个流程更适合php这种脚本语言,假设有一个8G的文件采用了oss的流程,有无数个分块,在最后合并文件过程中很容易执行超时,如使用任务队列新开单独进程的方式,又增加了复杂性容易出错,对脚本语言也不够友好。 并且,阿里云采用的是这种流程,那换另外一个xx云如果是其他流程,扩展就又失效了,不具有通用性。

ghost commented 4 years ago

@peinhu 我目前通过这种方式实现了,方式如下:将第一次上传的文件保存,每次发送uploading的时候我计算该文件的分片上传到阿里云oss,总感觉怪怪的。我发现你的插件每次uploading都是对文件全量提交,是slice未生效吗?还是设计就如此呢? 我理想的应该是你每次uploading过来我都直接转发到阿里云分片上传,为此我以文件的basename为key缓存了ossClient和uploadId,奈何限制比较多(因为阿里云的分片上传不允许多个不同的upload实例上传,而每次的uploading请求都是新的tmp),有什么好指点的地方吗?或者有问题的地方。方便可以wechat聊下(base64):d2o1MjBoYXJk