peinhu / AetherUpload-Laravel

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

在LARAVEL9版本中存在无法使用秒传的问题。 #103

Open sunqj-sun opened 2 years ago

sunqj-sun commented 2 years ago

在LARAVEL9版本中存在无法使用秒传的问题,原因是League\Flysystem的版本问题。 在LARAVEL5版本中,使用League\Flysystem是1.0版本,在LARAVEL9版本中 League\Flysystem 使用的是3.0版本,所以像 use League\Flysystem\Adapter\AbstractAdapter; use League\Flysystem\Adapter\Polyfill\NotSupportingVisibilityTrait; 就会报不存在, 在FLYSYSTEM3.X中也不存在Adapter这个目录。

如果不使用秒传,则一切正常。不知道作者是否可以版本更新一下,或告知如何更改。

sunqj-sun commented 2 years ago

我尝试改动了一下源代码后,发现可以秒传了。但我忘了修改哪些部分,然后又改乱了,还在坚持中。

peinhu commented 2 years ago

好的,等我看看

sunqj-sun commented 2 years ago

@peinhu peinhu 谢谢。

peinhu commented 2 years ago

你好,不好意思现在才回你,之前在虚拟机安装最新版php和laravel的时候遇到很多问题,刚刚才解决,然后我验证了一下秒传是没问题的。 无法秒传应该是因为laravel在某个版本中,把默认的redis驱动由predis换成了phpredis,所以现在你只要在.env文件中规定redis的驱动即REDIS_CLIENT=predis就行了,其他什么都不用改,我已经验证过了,你试试。

peinhu commented 2 years ago

至于你说的League\Flysystem版本的问题,我验证时没遇到这种报错,不能复现,似乎无法秒传跟这个版本问题无关,先这样吧,后续有什么问题你再提出。

sunqj-sun commented 2 years ago

好的,谢谢你!辛苦了, 我现在再试一下。有结果了我再回复您。

sunqj-sun commented 2 years ago

抱歉,还得打扰您。之前的提问很荣幸能收到您的回复。

我说一下我再次测试的结果 , 我使用 composer create-project laravel/laravel testupdate --prefer-dist 创建LARAVEL项目,项目默认的是LARAVEL9,PHP的版本要求是8.1, 我把PREDIS装好,并在ENV中加上REDIS_CLIENT=predis 在aetherupload中也把 spark-md5.min.js 文件引入,其它相关的配置我也配置好了, 然后打开:http://www.domain.com/aetherupload,进行大文件上传,在浏览器的控制台中出现500的字样,查看网络中的响应则显示

"message": "Class \"League\\Flysystem\\Adapter\\AbstractAdapter\" not found",
"exception": "Error",
"file": "D:\\wwwroot\\php\\2022\\0331\\testbigdataup\\vendor\\peinhu\\aetherupload-laravel\\src\\RedisAdapter.php",
"line": 9,

在查看 League\Flysystem 项目时,发现存在其版本地1.0的时侯,才会有 Adapter 这个目录,版本2,3两个版本都删除了Adapter这个目录,后来我查到网上有人说 版本是有漏洞. 
不启用秒传,则代码运行正常。
期待收到您的答复。万分感谢。
xini2603 commented 2 years ago

抱歉,还得打扰您。之前的提问很荣幸能收到您的回复。

我说一下我再次测试的结果 , 我使用 composer create-project laravel/laravel testupdate --prefer-dist 创建LARAVEL项目,项目默认的是LARAVEL9,PHP的版本要求是8.1, 我把PREDIS装好,并在ENV中加上REDIS_CLIENT=predis 在aetherupload中也把 spark-md5.min.js 文件引入,其它相关的配置我也配置好了, 然后打开:http://www.domain.com/aetherupload,进行大文件上传,在浏览器的控制台中出现500的字样,查看网络中的响应则显示

"message": "Class \"League\\Flysystem\\Adapter\\AbstractAdapter\" not found",
"exception": "Error",
"file": "D:\\wwwroot\\php\\2022\\0331\\testbigdataup\\vendor\\peinhu\\aetherupload-laravel\\src\\RedisAdapter.php",
"line": 9,

在查看 League\Flysystem 项目时,发现存在其版本地1.0的时侯,才会有 Adapter 这个目录,版本2,3两个版本都删除了Adapter这个目录,后来我查到网上有人说 版本是有漏洞. 
不启用秒传,则代码运行正常。
期待收到您的答复。万分感谢。

的确有这个问题:可以临时不用redis驱动,在配置项中:'header_storage_disk' => 'local', 把redis改为local来实现秒传

sunqj-sun commented 2 years ago

抱歉,还得打扰您。之前的提问很荣幸能收到您的回复。 我说一下我再次测试的结果 , 我使用 composer create-project laravel/laravel testupdate --prefer-dist 创建LARAVEL项目,项目默认的是LARAVEL9,PHP的版本要求是8.1, 我把PREDIS装好,并在ENV中加上REDIS_CLIENT=predis 在aetherupload中也把 spark-md5.min.js 文件引入,其它相关的配置我也配置好了, 然后打开:http://www.domain.com/aetherupload,进行大文件上传,在浏览器的控制台中出现500的字样,查看网络中的响应则显示

"message": "Class \"League\\Flysystem\\Adapter\\AbstractAdapter\" not found",
"exception": "Error",
"file": "D:\\wwwroot\\php\\2022\\0331\\testbigdataup\\vendor\\peinhu\\aetherupload-laravel\\src\\RedisAdapter.php",
"line": 9,

在查看 League\Flysystem 项目时,发现存在其版本地1.0的时侯,才会有 Adapter 这个目录,版本2,3两个版本都删除了Adapter这个目录,后来我查到网上有人说 版本是有漏洞. 
不启用秒传,则代码运行正常。
期待收到您的答复。万分感谢。

的确有这个问题:可以临时不用redis驱动,在配置项中:'header_storage_disk' => 'local', 把redis改为local来实现秒传

感谢您的回复。如果改回LOCAL, 那一切就正常了,也不存在上面的错误,但应该不是秒传。 在LOCAL模式下,我试着从办公室往阿里云上传一个3个G的文件,基本上在30分钟左右就可以完成,所以我试一下秒传是什么样的,所以折腾了好一会,之前改动了一下源代码实现了秒传,但后来想完善一下代码,慢慢就改乱了。