Laravel 5 zipArchive to Storage против публичных - PullRequest
0 голосов
/ 27 августа 2018

В моем приложении Larevel я хотел бы собрать несколько файлов в zip-файл для загрузки клиентом. Я предпочитаю не помещать почтовый индекс в общую папку. поэтому я создаю папку «tobedownload» в своей папке «/ storage» и планирую поместить туда zip-файл. но я получил ошибку Whoops:

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

Мой пример кода выглядит следующим образом: (скажем, файл должен быть помещен в zip-файл «what.PNG» в публичной папке. Не беспокойтесь, я не буду использовать файлы в этом месте в реальной реализации. Пример архивный файл называется «AllDocuments.zip» (он находится в папке хранилища / полной загрузки).
публичная функция 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-файл в общую папку, я смогу создать zip-файл. следующий пример кода работает.
публичная функция downloadzip () { // кажется, все работает, если я помещаю архив в общую папку

   $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.

1 Ответ

0 голосов
/ 27 августа 2018

ОК. Думаю, я понял это. папка была неправильной. когда вы делаете каталог на хранилище. Storage::disk('local')->makeDirectory('yourfolder') папка, которую вы создаете, находится на /storage/app/yourfolder вместо /storage/yourfolder.

Таким образом, в моем предыдущем коде изменение $path=storage_path('tobedownload'); на $path=storage_path('app/tobedownload'); заставляет его работать.

...