Решаемые. Может быть, это помогает кому-то еще использовать ZipStream в Symfony.

я есть приложение Symfony 2.8, и, нажимая кнопку «скачать», я использую ключи нескольких больших файлов (изображения, видео) на s3 для потоковой передачи в браузер в виде zip-файла с использованием ZipStream (https://github.com/maennchen/ZipStream-PHP).

Потоковая передача файлов и загрузка в виде zip-файла (сохраненного, а не сжатого) успешно выполняется в браузере, и zip-файл попадает в раздел Downloads. Однако при попытке открыть zip-архив в Mac OSX El Capitan с помощью служебной программы архивирования (встроенного программного обеспечения для архивирования в OSX) происходит ошибка. Ошибка:

Невозможно развернуть «test.zip» в «Загрузки». (Ошибка 2 - Нет такого файла или каталога.)

Я видел более старые, идентичные проблемы на SO и пытался исправить их, особенно этот пост:https://stackoverflow.com/a/5574305/136151 и следил за вопросами и связями с общественностью в ZipStream, которые касаются и исправлениями в Guzzle и т. д.

Проблема в том, что вышеперечисленные исправления были еще в 2011 году, и в это время дела пошли дальше Поэтому, применяя те же исправления, я не получаю рабочего результата.

Конкретные исправления, которые я попробовал: 1. Установка «версии для извлечения» в 0x000A, как предложено. Также как «20», как рекомендуется в другом посте. Я установил то же самое для "версия сделана". 2. Я попытался заставить метод сжатия «сдуть», а не «сохранить», чтобы посмотреть, получился ли у меня рабочий результат. Сохраненный результат - все, что мне нужно и подходит для почтового индекса, используемого в качестве файла-контейнера для изображений и видео.

Я могу извлечь zip с помощью стороннего архивного приложения под названием The Unarchiver. Тем не менее, пользователи не будут знать и не смогут установить альтернативное архивное приложение, подходящее для моего веб-приложения. Это не эффективное решение.

Кто-нибудь имеет знания или опыт решения этой проблемы и может помочь мне с ее решением?

NB. Потоковый почтовый индекс в браузер является необходимым решением. Загрузка ресурсов с сервера s3 на сервер для создания zip-файла и последующей передачи полученного zip-файла в браузер не является решением, учитывая количество времени и издержек, связанных с таким подходом.

Добавлена ​​информация, если требуется:

Код и настройка: - Файлы хранятся на с3. - Веб-приложение Symfony 2.8 на PHP7.0 работает на ec2 с Ubuntu. - Используя aws-sdk-php, создайте s3client с действительными учетными данными, и я регистрирую StreamWrapper (s3client-> registerStreamWrapper ()) на s3client. Это для извлечения файлов из s3 через fopen для потоковой передачи в библиотеку ZipStream:

$this->s3Client = $s3Client;  
$this->s3Client->registerStreamWrapper();

// Initialize the ZipStream object and pass in the file name which
//  will be what is sent in the content-disposition header.
// This is the name of the file which will be sent to the client.
// Define suitable options for ZipStream Archive.
$opt = array(
        'comment' => 'test zip file.',
        'content_type' => 'application/octet-stream'
      );
$zip = new ZipStream\ZipStream($filename, $opt);

$keys = array(
      "zipsimpletestfolder/file1.txt"
  );

foreach ($keys as $key) {
    // Get the file name in S3 key so we can save it to the zip file 
    // using the same name.
    $fileName = basename($key);

    $bucket = 'mg-test';
    $s3path = "s3://" . $bucket . "/" . $key;

    if ($streamRead = fopen($s3path, 'r')) {
      $zip->addFileFromStream($fileName, $streamRead);        
    } else {
      die('Could not open stream for reading');
    }
}

$zip->finish();

Результаты вывода Zip:

Извлечение на Mac с помощью Archive Utility завершается с ошибкой 2

Извлечение на Mac с Unarchiver работает.

Добыча на окнах с 7-почтовыми работами.

Извлечение на Windows с WinRar не удается - говорит, что ZIP поврежден.

Заголовки ответа:

редактировать Я открыт для использования другого метода потоковой передачи файлов в браузер в виде zip-файла, который можно открыть на Mac, Windows, Linux без использования ZipStream, если это будет предложено. Только не для создания стороны почтового файлового сервера для последующей потоковой передачи после этого.

Ответы на вопрос(1)

Ваш ответ на вопрос