peinhu / AetherUpload-Laravel

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

上传文件在服务器上一直报创建文件失败 #28

Closed sheghai closed 5 years ago

sheghai commented 6 years ago

服务器及环境:centos-7.4.1708+php7.2+Nginx。 不论是改变存储路径还是官方默认路径(也就是啥不该,直接安装步骤操作),都一样错误。可是在本地ok,

希望改进,动态存储路径,比如每个用户存储路径归类,比如用户1存1文件夹下,用户2存2文件夹下。我尝试在config的配置下改变路径,"UPLOAD_PATH" => public_path() . DIRECTORY_SEPARATOR . "Uploads" . DIRECTORY_SEPARATOR . "shops/".session('shopid')。哈哈,session问题来了

abusizhishen commented 6 years ago

@sheghai @peinhu 我今天也遇到这个问题,是 因为路径没有创建导致的

abusizhishen commented 6 years ago

@sheghai @peinhu

 22     public function createFile($uploadBaseName, $uploadExt){
 24         $uploadPartialFile = $this->generateUploadPartialFilePath($uploadBaseName, $uploadExt);
 25         $uploadHead = $this->generateUploadHeadPath($uploadBaseName);
 26 
 27         $this->generateFilePath($uploadPartialFile);
 28         $this->generateFilePath($uploadHead);
 29 
 30         if ( ! (@touch($uploadPartialFile) && @touch($uploadHead)) ) {
 31             return trans('aetherupload::messages.create_file_fail');
 32         }
 33 
 34         return false;
 35     }
 36 
 37     public function generateFilePath($path) {
 39         if (!file_exists($path)){
 40             $pos = strrpos($path, DIRECTORY_SEPARATOR);
 41             $dir = substr($path, 0,$pos);
 42 
 43             if (! is_dir($dir)){
 44                 mkdir($dir,0777, true);
 45             }
 46         }
 47     }

我在 vendor/peinhu/aetherupload-laravel/src/Receiver.php 中新增了27到28,37到46行,暂时解决了问题

sheghai commented 6 years ago

@abusizhishen 问题解决了,你那方法也对。是0755权限问题,把文件权限改0777就OK了

peinhu commented 6 years ago

@sheghai @abusizhishen 抱歉最近比较忙,一直在开发新版本回复晚了。创建文件失败无非就是路径不对或者权限不够造成的,我估计可能你部署项目是将本地整个项目(包括上传目录)直接拷贝传输过去的,而你传输文件所登陆的用户又和运行php的用户不一样,导致了上传目录没有写入权限。这样有两个办法,一是把上传目录的所属用户改成执行php的用户,二是把上传目录的权限改大点,一般不建议把保存文件的那个目录权限设置成777,那样权限太大了,可能会有安全隐患。

jeffid commented 6 years ago

在使用默认路径可以上传,而改别的路径后不能上传(两者的权限都给了777),后来发现是新路径下没 _head 和 file(默认的分组目录)这两个目录的原因。手动新建或是用楼上方法创建上述两个目录即可正常上传。

peinhu commented 5 years ago

AetherUpload 2 已发布,根据用户反馈和需求,添加分布式部署支持、添加Mime-Type检查、添加头文件redis储存驱动、添加跨域中间件、添加秒传开关配置项、添加自定义黑名单配置项、代码重构优化。
现集中关闭已解决问题,如仍有疑问请跟帖留言。