peinhu / AetherUpload-Laravel

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

文件上传后无法下载,数据损坏 #16

Closed kylesean closed 7 years ago

kylesean commented 7 years ago

你好,这个 package 我在5.4版本中试了下,的确实现了文件上传,当我用 response()->download() 下载的时候数据就损坏了,涉及的格式有 zip jpg等。难道是我的使用姿势不对?望回复,谢谢...

peinhu commented 7 years ago

你好,我刚才用laravel最新的版本5.4.33试了一下,上传的zip和jpg都可以正常显示下载,没发现有这个问题。你提到了使用response()->download(),其实下载一个文件,只需提供对应路由就行了,后端是不需要写任何代码的。如果不是这个原因,可否详细描述一下你的操作?

peinhu commented 7 years ago

下载的路由格式是 "/aetherupload/download/"+savedpath+"/"+newname
比如你上传后保存到数据库的savedpath是file/201708/1.jpg,那么你只需在页面中按照上面的格式拼出"/aetherupload/download/file/201708/1.jpg/newname“ 这样的路由就可以下载了

kylesean commented 7 years ago

感谢回复。。我恢复了默认配置试了下你这个路由,还是同样的错误 qq 20170820182051

qq 20170820182150

qq 20170820182158

kylesean commented 7 years ago

环境:

peinhu commented 7 years ago

@kylesean 我使用windows做服务器也没这个问题,其他人也没提出过这个问题,上传的文件应该是完整的吧?你先排查一下,换个浏览器什么的。。

peinhu commented 7 years ago

@kylesean 我帮你查了下,可能是你浏览器安装的某些下载类扩展导致的,你关掉试试。

kylesean commented 7 years ago

@peinhu 刚才新拉了一个项目试了,正常,我这边估计集成在自己的环境出问题了,扩展全禁了,还是不行,我再排查下,感谢。。。。这个 issue 我关了,找出原因我再来回复,谢谢。。。

peinhu commented 7 years ago

恩,好的。

kylesean commented 7 years ago

@peinhu 解决了,使用了这个 ob_end_flush() 方法输出缓冲区内容并关闭缓冲,我看了下wamp默认的PHP配置文件里

implicit_flush 这个是off的 该配置直接影响apache的缓冲区,有2种配置参数. on/off on - 自动刷新apache缓冲区,也就是,当php发送数据到apache的缓冲区的时候,不需要等待其他指令,直接就把输出返回到浏览器 off - 不自动刷新apache缓冲区,接受到数据后,等待刷新指令

应该跟这里有关,另外PHP自带的 output_buffering 这个缓冲我是关闭的,所以问题应该是这里,哈哈

peinhu commented 7 years ago

应该是output_buffering被关闭的问题,所以报文件不完整,解决了就好。