Вывод содержимого файла в двоичном виде в виде ответа AJAX

ОК, название не дает особого смысла, поэтому позвольте мне объяснить мою очень странную схему.

Участвуют два сервера:

  • сайт: удаленный
  • localhost: локальная машина

Рабочий процесс выглядит следующим образом:

  • Сайт вызывает localhost через междоменный AJAX
  • В ответ localhost динамически создает ZIP-файл с помощью PHP ZipArchive lib
  • localhost передает необработанные данные, которые составляют архив, как ответ AJAX

Запрос сделан и архив сделан — все хорошо. Архив открыт, все хорошо. Сейчас я застрял в том, как передать этот архив как ответ AJAX, чтобы его можно было «собрать заново» (как Шалтай-Болтай). Когда я делаю это в настоящее время (через file_put_contents()) это ошибки при открытии, говоря, что это недействительно. В настоящее время я просто выводю необработанные данные архива:

echo file_get_contents('path/to/archive.zip');

Это нормально, но отправляет искаженные символы в ответ. Я не знаю много о кодировке и заголовках, поэтому извиняюсь, если это кажется очевидным.

Для ответа, я должен искать преобразовать это в двоичный файл, или посылать определенные заголовки и т. Д.? Я попытался отправить заголовок multipart / form-data, но без кубиков. Заголовки не моя сильная сторона.

пожалуйста, обратите внимание CURL не вариант в этом сценарии, иначе я буду смеяться.

0

Решение

Вы должны прочитать zip-файл как двоичные данные с классом JavaScript Blob.

Это фрагмент кода из документации Mozilla

var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "arraybuffer";

oReq.onload = function(oEvent) {
var blob = new Blob([oReq.response], {type: "application/octet-stream"}); //
// you have nothing to do with the blob...
// ...
};

oReq.send();
1

Другие решения

Других решений пока нет …