使用tastypie,backbone和knockout进行Ajax文件/图像上传?

时间:2013-04-29 08:04:54

标签: ajax django backbone.js knockout.js tastypie

我无法弄清楚如何使用tastypie,backbone和knockout进行文件/图片上传

[knockout]我不确定数据绑定在输入上是什么,以便我可以上传文件:

// what I have right now
<input type="file" data-bind="value: image"/>

[backbone]我有post url set但是给出了上面的设置,我的文件只是一个字符串

imageModel.get("image") //gives me a string like C:/image

[tastypie]保存上述模型时,不会上传任何文件,FileField只是一个字符串。它甚至没有通过正常的upload_to = ... django dynamics

# in my tastypie resource

class ImageResource(ModelResource):

    image = fields.FileField(attribute="image")
    # ...

我知道这个问题有很多部分,所以如果一个解决方案解决了所有问题,我会感到非常惊讶。但是,任何人都可以指出我正确的方向,特别是tastypie的骨干(只发送文本)和tastypie到db(不使用upload_to,没有文件保存)问题?

1 个答案:

答案 0 :(得分:0)

值绑定只会在文本中提供文件名,如果你需要实际的文件对象需要自定义绑定,我为我的项目做了一个,然后使用FileReader html5 objec将文件流式传输到服务器

ko.bindingHandlers.file = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        ko.utils.registerEventHandler(element, "change", function () {
            writeValueToProperty(valueAccessor(), allBindingsAccessor, "file", element.files[0]);
        });
    },
    update: function (element, valueAccessor) {
        if (ko.utils.unwrapObservable(valueAccessor()) == null) {
            element.value = "";
        }
    }
};

http://jsfiddle.net/b85YC/