我是KnockoutJS的新手,到目前为止我都在挖掘它,但尝试我可能无法在任何地方找到这些信息,所以我希望社区可以提供帮助!在我的视图中,我对文件输入有以下数据绑定:
<input type="file" data-bind="value: ImageToUpload"/> <button data-bind="click: $root.saveImage">Upload</button>
这是“foreach”div中列表的一部分,因此变量“ImageToUpload”对应于该列表中对象的属性.
在我的viewmodel中,Upload按钮调用saveImage(),我调用Web服务并将表单数据传递给.aspx页面:
self.saveImage = function (MyObject,event) { $.post("Service.aspx",MyObject,function (returnedData) { }); }
该对象传递给我的服务很好,我可以按预期访问所有表单数据,包括“ImageToUpload”变量……但这里是我被卡住的地方:
1)“ImageToUpload”只是一个字符串,表示我上传的文件的名称,而不是ByteArray.如何访问图像文件而不仅仅是名称?
2)有没有更好的方法将ByteArray作为Stream或其他格式传递给响应头?
3)我的技术完全不合适吗?有一个更好的方法吗?我的目标是拥有一个上传到的图像“插槽”的动态列表.
提前致谢!
解决方法
无法访问本地文件内容是JavaScript安全沙箱的基本限制.随着
HTML5 file API的推出,它被取消了,但不幸的是,支持是
far from universal.如果您的代码需要在不兼容的浏览器中工作,您唯一的选择是让浏览器处理传统的multipart / form-data上传.另一方面,如果不支持IE< 10对你来说很好,可以使用File API“Knockout方式”和自定义绑定.看看这个例子:
http://khayrov.github.com/jsfiddle/knockout-fileapi(出于某种原因,当我尝试在其中运行此代码时,jsFiddle对我来说非常糟糕).
Source code在Github.