Laravel — загрузка нескольких упорядоченных файлов на основе идентификатора

#php #laravel

#php #laravel

Вопрос:

мне удалось создать функцию загрузки, которая работает, и мне удалось загрузить один файл, вот моя функция загрузки :

 public function download($id)
    {
        try{
            $test = DB::table('media_order')->where('id',$id)->get();
            $string = '/storage/file/' . $test[0]->attachment_name;
            return $string;
        }catch (Exception $e){
            return $e->getMessage();
        }
    }
 

и я попытался создать несколько загружаемых файлов, в которых находится файл implode() , но я не знаю, как explode() это сделать, а затем загрузить его сразу.

Вот мой function create в моем контроллере на всякий случай :

 if($files = $request->file('attachment_name'))
            {
                foreach($request->file('attachment_name') as $image )
                {
                    $name = date('dmY') . "-" .$image->getClientOriginalName();
                    $image->move(public_path().'/storage/file/', $name);
                    $datatest[] = $name;
                    
                }
            }

            $insert['attachment_name'] = implode("|",$datatest);
 

До сих пор я пытался использовать explode() , но в итоге это не сработало и ошибка, а также я пытался использовать zip , например, так :

 public function download($id)
    {
        $zip = new ZipArchive();
        $file_path = public_path()."/storage/file/";
        $row = DB::table('media_order')->where('id',$id)->get()->first();

        if($zip->open($file_path, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE) !== TRUE){
            die("Error");
        }

        if($row){
            $files = $row->attachment_name;
            $files = explode("|",$files);

            foreach($files as $key => $file){
                $zip->addFile($file_path.$file,$file);
            }

            // header("Location:".Request::root()."/uploads/");
        }

        $zip->close();

        return Response::download( public_path().'/storage/file/'. );

    }
 

И, конечно, это не работает, у кого-нибудь есть способ решить эту проблему, чтобы я мог загружать файлы с несколькими массивами на основе их id и из массива, который был explode() ?, прошу прощения за мой английский и спасибо!

Обновить :

для первой ошибки из :

 $file_path = public_path()."/storage/file/zipped.zip";
 

сообщение об ошибке выглядит следующим образом :

 message: "The file "C:\xampp\htdocs\ereport-master\public/storage/file/zipped.zip"
 

а также я тоже сделал что-то подобное :

 $file_path = public_path()."storagefile";
 

но также ошибка 404 не найдена.

следующий, который я попробовал, это :

 $file_path = public_path()."/storage/file/";
 

но теперь возникает ошибка $zip->close(); , которая приводит к такой ошибке :

 message: "ZipArchive::close(): Renaming temporary file failed: Permission denied"
 

Ответ №1:

вместо

  $file_path = public_path()."/storage/file/";
 return Response::download( public_path().'/storage/file/'. );
 

должно быть что-то вроде

 $file_path = public_path()."/storage/file/zipped.zip";
return Response::download( $file_path );
 

Комментарии:

1. я попробовал $file_path = public_path()."/storage/file/zipped.zip"; , но в итоге он не был найден, поэтому я возвращаюсь к оригиналу $file_path , я следил за остальными, но не сталкивался с такой ошибкой, как "ZipArchive::close(): Renaming temporary file failed: Permission denied"

2. что не найдено? zipped.zip файл или файлы, которые вы получаете $files = explode("|",$files); . Ошибка «Отказано в разрешении» может быть исправлена с помощью правильного разрешения папки; предпочтительно 777 и настройки пользователя папки как www-data

3. "/storage/file/zipped.zip" не найден

4. о, и я не знаю, как исправить разрешение папки, какой файл или настройку необходимо изменить?, прости меня, я все еще новичок в этом.

5. для файла, который не найден, не должно быть ошибки, используя ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE можете ли вы точно указать, что такое сообщение об ошибке и в какой строке оно выдает ошибку. для разрешения файлов вам нужно беспокоиться о системах Unix, а не о Windows в основном. Я буду ссылаться на это guru99.com/file-permissions.html