2014-11-22 1 views
0

ОК, название не дает большого смысла, поэтому позвольте мне объяснить мою очень странную настройку.Вывод содержимого файла как двоичный, как ответ AJAX

Два сервера участвуют:

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

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

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

запроса сделан и архив сделан - все хорошо. Архив открыт, все хорошо. Теперь я застрял в том, как передать этот архив как ответ AJAX, чтобы его можно было «снова собрать» (à la Humpty Dumpty). Когда я делаю это сейчас (через file_put_contents()), это ошибки при открытии, говоря, что это неверно. В настоящее время я просто вывожу исходные данные архива:

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

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

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

Обратите внимание: cURL не является вариантом в этом случае, иначе я буду смеяться.

+0

Почтовый архив предназначен для его загрузки? или отображение его или что? не понял цели получения архива с помощью Ajax – Sn0opr

+0

Цель не имеет значения - это ситуация, с которой мне приходится работать. Идея заключается в том, что ответ AJAX от localhost принимается сайтом, а затем отправляется через другой запрос POST AJAX в веб-службу на сайте, которая должна быть перестроена как архив. По сути, это все средства создания, а затем передачи ZIP-файла через AJAX. – Utkanos

ответ

1

Вы должны прочитать 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();

Затем отправить этот файл (BLOB) с методом POST к месту назначения

var oReq = new XMLHttpRequest(); 
 
oReq.open("POST", url, true); 
 
oReq.onload = function (oEvent) { 
 
    // Uploaded. 
 
}; 
 

 
oReq.send(blob); //the blob that you loaded
вы можете подробнее читайте в документации Mozi lla: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data

+0

Спасибо. Я собираюсь вникать в это сейчас и посмотреть, как я нахожусь. – Utkanos

+0

Yay!Все работает, хотя я немного споткнулся, так как не понял, что данные, отправленные таким образом, должны быть получены через 'file_get_contents ('php: // input')', поэтому я только что кое-что узнал. Я смотрел в '$ _POST'. Большое спасибо за вашу помощь. – Utkanos

+0

добро пожаловать;) – Sn0opr

Смежные вопросы