如何通过骨干接收图像?

时间:2014-03-11 12:30:01

标签: javascript json cakephp backbone.js ripple

我试图通过主干从服务器接收图像。后端应用程序使用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"}

到目前为止哪个好 - 但是一旦我添加了包含数据库中实际blob的data属性,它就不起作用。我尝试使用以下代码将其编码为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编码)文件?或者我的方法是完全错误的吗?

编辑: 已发送标头:

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

当base64encoded字符串不存在时,我能够收到响应。

编辑 - 解决方案: 我应该提到的是,我正在使用涟漪来模拟手机上的环境。现在我已经想出了几件事:

  1. 问题不在于base64编码 - 当字符串超过4000个字符时出现问题。涟漪无法正确处理服务器的响应。

  2. Ripple具有代理跨域请求的功能。我把那个代理关掉了。通过将代理切换到本地或远程,JSON-Response中的~4000个字符的限制没有开始。这不是JSON的缺点或者由于事实上回传给客户端的字符串没有限制。

1 个答案:

答案 0 :(得分:1)

$ this-&gt; response-&gt; header(&#34; Access-Control-Allow-Methods&#34;,&#34; POST,PUT,GET,DELETE,HEAD,OPTIONS&#34;); < / p>

阅读here,这是一个非常好的PHP代码解释。除此之外......阅读CakePHP安全doc。我知道一些框架消息选项请求上的CSRF令牌。最后要尝试的是创建一个纯PHP代码处理请求,看看CakePHP是否确实阻止了请求。