@Nick22k

Yii2, скачивание нескольких файлов?

Подскажите пожалуйста, как реализовать скачивание нескольких файлов, при создании Tasks(задачи), я прикрепляю к ней несколько файлов (2) которые сохраняются в другую таблицу Files. Мне нужно сделать actionDownload так, чтобы при нажатии на кнопку скачать , скачивались оба файла.
функция загрузки
public function actionDownload($id)
    {
        $data = Files::findOne($id);
        header('Content-Type:'.pathInfo($data->url,PATHINFO_EXTENSION));
        header('Content-Disposition: attachment; name='.$data->name);
        return Yii::$app->response->sendFile($data->url);
    }

функция создания
public function actionCreate()
    {
        $model = new Tasks();
        $performer = new Performers();
        $model2 = new Files();

        if ($model->load(Yii::$app->request->post()) && $performer->load(Yii::$app->request->post())&& $model2->load(Yii::$app->request->post()))
        {
            $model->save();
            $url = UploadedFile::getInstances($model2,'url');
            foreach($url as $file){
                $filename = uniqid();
                $model2 = new Files();
               //echo var_dump($file);
              // die();
            //   if ($file->upload()){
            if($file->saveAs(Yii::getAlias(('@webroot').'/uploads/'. $filename.'.'.pathinfo($file->name, PATHINFO_EXTENSION)))){
                $model2->id_task = $model->id;
                $model2->name = $file->name;
                $model2->url =  Yii::getAlias(('@webroot').'/uploads/'. $filename.'.'.pathinfo($file->name, PATHINFO_EXTENSION));
                $model2->save(false);
            } 
        }

            // сохраняем id Задачи в таблицу Исполнители
            $performer->id_task = $model->id;
            $performer->save();

           return $this->redirect(['view', 'id' => $model->id]);
       } else{

       return $this->render('create', [
           'model' => $model,
           'performer' => $performer,
           'model2' => $model2,
       ]);

         }
     }
  • Вопрос задан
  • 473 просмотра
Пригласить эксперта
Ответы на вопрос 1
sokollondon
@sokollondon
Как скачать несколько файлов архивом
$file = \Yii::getAlias('@webroot/archive'.microtime().'.zip');
$zip = new \ZipArchive();
$zip->open($file, \ZIPARCHIVE::CREATE);
$zip->addFile("index.php");//добавляем файлы в архив
$zip->close();
if (file_exists($file)) {
    \Yii::$app->response->sendFile($file, 'archive.zip');
    ignore_user_abort(true);//удаление временного файла
    if (connection_aborted()) unlink($file);
    register_shutdown_function('unlink', $file);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы