kentuck1213
@kentuck1213

Не получается скачать файл с сервера?

Использую этот модуль: https://github.com/Chumper/Zipper
Метод:
public function getDownloadAllPassport($passports)
    {
        $passports = explode(',', $passports);
        $name = uniqid();
        foreach ($passports as $passport) {
            $user_name = VisaOrder::findOrFail($passport)->name;
            if (Upload::getFiles('passport', $user_name)) {
                File::copyDirectory("upload/passport/$user_name", "upload/zip/$name/$user_name");
            }
        }
        Zipper::make("upload/zip/$name/passport.zip")->add(glob("upload/zip/$name"));
        return response()->download(public_path("upload/zip/$name/passport.zip"));
    }

Метод работает почти как надо, зигует и копирует куда надо. Но в конце когда нужно выдать файл выдает вот такую ошибку:
FileNotFoundException in File.php line 37:
The file "/home/dragger/MyProjects/site.local/public/upload/zip/5824f3b11b986/passport.zip" does not exist

Решил по экспериментировать закоментел весь код в методе кроме return :
public function getDownloadAllPassport($passports)
    {
//        $passports = explode(',', $passports);
//        $name = uniqid();
//        foreach ($passports as $passport) {
//            $user_name = VisaOrder::findOrFail($passport)->name;
//            if (Upload::getFiles('passport', $user_name)) {
//                File::copyDirectory("upload/passport/$user_name", "upload/zip/$name/$user_name");
//            }
//        }
//        Zipper::make("upload/zip/$name/passport.zip")->add(glob("upload/zip/$name"));
        return response()->download(public_path("upload/zip/5824f3b11b986/passport.zip"));
    }

Как тут же у меня идет скачивание файла. Не знаю почему он его с первого раза невидит.
  • Вопрос задан
  • 292 просмотра
Решения вопроса 1
NeLexa
@NeLexa
Попробуйте другую библиотеку, без лишней возни с файловой системой.
composer require nelexa/zip

public function getDownloadAllPassport($passports)
{
    $passports = explode(',', $passports);
    $name = uniqid();
    $zipFile = \PhpZip\ZipOutputFile::create();
    foreach ($passports as $passport) {
        $user_name = VisaOrder::findOrFail($passport)->name;
        if (Upload::getFiles('passport', $user_name)) {
            $recursive = true;
            $toZipPath = $name . '/';
            $zipFile->addDir("upload/passport/$user_name", $recursive, $toZipPath);
        }
    }
    $zipFile->outputAsAttachment('passport.zip');
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы