Javascript 强制主干将属性另存为文件

Javascript 强制主干将属性另存为文件,javascript,backbone.js,Javascript,Backbone.js,有没有一种方法可以使用模型。设置和模型。保存的方式将强制主干网将数据作为文件发送到服务器(就像您提交一个带有标记的表单一样?简短的回答是否。长的回答是,有点 这实际上与主干网没有任何关系,而是能够在浏览器中使用AJAX文件。解决方案是使用HTML 5中的文件API。下面是一个使用主干网模型的示例 让我们假设我们有一个用户模型,并希望在该模型上保存一个化身文件 // Backbone Model JS User = Backbone.Model.extend({ readAvatar : f

有没有一种方法可以使用
模型。设置
模型。保存
的方式将强制主干网将数据作为文件发送到服务器(就像您提交一个带有
标记的表单一样?

简短的回答是否。长的回答是,有点

这实际上与
主干网
没有任何关系,而是能够在浏览器中使用AJAX文件。解决方案是使用HTML 5中的文件API。下面是一个使用
主干网
模型的示例

让我们假设我们有一个用户模型,并希望在该模型上保存一个化身文件

// Backbone Model JS

User = Backbone.Model.extend({
  readAvatar : function (file, callback) {
    var reader = new FileReader(); // File API object for reading a file locally
    reader.onload = (function (theFile, self) {
      return function (e) {
        // Set the file data correctly on the Backbone model
        self.set({avatar_file_name : theFile.name, avatar_data : fileEvent.target.result});
        // Handle anything else you want to do after parsing the file and setting up the model.
        callback();
     };
    })(file, this);
    reader.readAsDataURL(file); // Reads file into memory Base64 encoded
  }
});

// Somewhere in your view JS

this.$("input[type='file']").change(function (event) {
  var file = e.originalEvent.target.files[0];
  userModel.readAvatar(file, userModel.save);
});

// HTML
<form><input type="file" name="avatar"/></form>
//主干模型JS
User=Backbone.Model.extend({
readAvatar:函数(文件、回调){
var reader=new FileReader();//本地读取文件的文件API对象
reader.onload=(函数(文件,self){
返回函数(e){
//在主干模型上正确设置文件数据
self.set({avatar\u文件名:theFile.name,avatar\u数据:fileEvent.target.result});
//在解析文件和设置模型之后,处理您想要执行的任何其他操作。
回调();
};
})(本文件);
reader.readAsDataURL(file);//将文件读入内存Base64编码
}
});
//在你眼中的某个地方
这是。$(“输入[type='file']”)。更改(函数(事件){
var file=e.originalEvent.target.files[0];
readAvatar(文件,userModel.save);
});
//HTML
现在,在后端,您需要处理作为Base64编码数据传输的文件

有几个警告:

  • 如果您需要广泛的浏览器支持,那么此解决方案可能不适合您

  • Base64编码一个文件将使通过线路发送的数据量增加约30%


  • 我有类似的案例来创建文件上传的属性。我已经在这里发布了我的问题。我想知道我需要在这里更改什么“avatar_文件名”和“avatar_数据到我的文件名”ImageData