Laravel 5 zipArchive 到存储与到 public

Laravel 5 zipArchive to Storage vs to public

在我的Larevel 应用程序中,我想将一些文件放在一个zip 文件中供客户端下载。我不想将 zip 放在 public 文件夹中。 所以我在我的“/storage”文件夹中创建了一个 "tobedownload" 文件夹,并计划将 zip 文件放在那里。但我得到了糟糕的错误:

"ZipArchive::close(): Failure to create temporary file: No such file or directory"   

我的示例代码是这样的:(比如,需要压缩的文件是public文件夹中的"whatever.PNG"。不用担心,我不会使用这个位置的文件在实际实现中。示例存档文件名为 "AllDocuments.zip",位于 storage/tobedownload 文件夹下)。
public 函数 downloadzip(){

     Storage::makeDirectory('tobedownload',$mode=0775); 

   $path=storage_path('tobedownload');
   $public_dir=public_path();

   $zipFileName = 'AllDocuments.zip';


    $zip=new ZipArchive(); 

    if ($zip->open( $path. '/' .$zipFileName, ZipArchive::CREATE))
    {
        $zip->addFile($public_dir.'/whatever.PNG' ); //where the file needs to be add to archive
        $zip->close();

    }

}

但是,如果我将新的 zip 文件放在 public 文件夹中,我就可以创建 zip。以下示例代码有效。
public 函数 downloadzip(){ //如果我将存档放在 public 文件夹

中,似乎一切正常
   $public_dir=public_path();

   $zipFileName = 'AllDocuments.zip';


    $zip=new ZipArchive(); 

    if ($zip->open( $public_dir. '/' .$zipFileName, ZipArchive::CREATE))
    {
        $zip->addFile($public_dir.'/whatever.PNG' ); //where the file needs to be add to archive
        $zip->close();

    }

}

我怀疑这是权限问题,但我已经设置了存储 0755。感谢您的帮助...我在 Laravel 5.6。

OK.I 我想我明白了。文件夹错了。当您在存储上创建目录时。 Storage::disk('local')->makeDirectory('yourfolder') 您创建的文件夹位于 /storage/app/yourfolder 而不是 /storage/yourfolder

因此,在我之前的代码中,将 $path=storage_path('tobedownload'); 更改为 $path=storage_path('app/tobedownload'); 即可。