2014-03-11 2 views
1

Я пытаюсь получить изображения через магистраль с сервера. Бэкэнд-приложение использует CakePHP (что не важно в данный момент). Бэкэнд возвращает ответ JSON:Как получить изображение через позвоночник?

{"id":"4","waypoint_id":"56","user_id":"1","name":"Penguins.jpg","type":"image\/jpeg","size":"777835","created":"2014-03-10 18:05:29","modified":"2014-03-10 18:05:29","owner":"Nikel Weis"} 

Какой штраф до сих пор - но как только я добавить атрибут данных, который содержит фактическую блоб из базы данных не работает. Я пытался кодировать его в base64 строку (в PHP) с:

$response['data'] = base64_encode($response['data']); 

Но тогда клиент возвращает:

OPTIONS http://mytour.localhost/api/file/4 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4400' is therefore not allowed access. 

Но заголовок устанавливается. Мой файл модели в позвоночнике выглядит (довольно прямо вперед) это:

define([ 
    'jquery', 
    'jqm', 
    'underscore', 
    'backbone', 
], function($, jqm, _, Backbone) { 

File = Backbone.Model.extend({ 

    idAttribute: 'id', 

    urlRoot: '/api/file', 

    initialize:function(attributes, options) { 
    }, 

}); 

return File; 
}); 

Так как я могу получить (в формате base64) файлы, используя позвоночник? Или мой подход совершенно не так?

EDIT: Переданные заголовки:

$this->response->header('Access-Control-Allow-Origin', '*'); 
$this->response->header('Access-Control-Allow-Headers', 'X-Requested-With'); 

Я могу получить ответ, когда base64encoded строка нет.

EDIT - То, что я должен был упомянуть, заключается в том, что я использую рябь, чтобы эмулировать среду телефонных разговоров. Теперь я понял, несколько вещей:

  1. Проблема была не кодирование base64 - проблема произошла, когда строка превысила около 4000 символов. Реакция сервера не была правильно обработана пульсацией.

  2. Ripple имеет функцию прокси-сервера для перекрестных доменных запросов. Я отключил этот прокси. Путем переключения прокси на локальный или удаленный ограничение в ~ 4000 символов в JSON-Response не срабатывает. Это не было недостатком JSON или что-то из-за того, что в строках, переданных клиенту, нет ограничений.

+0

CORS. какие заголовки вы задаете в ответе сервера? – wayne

+0

Отредактированный вопрос. –

ответ

1

$ this-> response-> заголовок ("Access-Control-Allow-методы", "POST, PUT, GET, DELETE, HEAD, OPTIONS");

читать here, очень хорошее объяснение с помощью php-кода. Помимо этого ... прочитайте CakePHP security doc. Я знаю какое-то затухание структуры. Значок CSRF в запросе опций. Последнее, что нужно попробовать - создать чистый PHP-код, обрабатывающий запрос, и посмотреть, действительно ли CakePHP блокирует запрос.

+0

Спасибо за ваш ответ, но ошибка остается прежней. –

+0

Выяснил это - изменили вопросы. Но CORS-thingy подтолкнул меня в правильном направлении. Благодаря! –