我正在寻找使用 Knockout + .NET WebApi 技术的拖放文件上传组件。
我找到了 File Api 项目,它不支持旧浏览器,但我可以忍受。代码在这里:https ://github.com/khayrov/khayrov.github.com/tree/master/jsfiddle/knockout-fileapi 。
它创建自定义敲除绑定,一些代码部分:
HTML:
<input type="file" accept="image/*" data-bind="file: imageFile, fileObjectURL: imageObjectURL, fileBinaryData: imageBinary"/>
淘汰赛JS:
ko.bindingHandlers.file = {
init: function(element, valueAccessor) {
$(element).change(function() {
var file = this.files[0];
if (ko.isObservable(valueAccessor())) {
valueAccessor()(file);
}
});
},
update: function(element, valueAccessor, allBindingsAccessor) {
var file = ko.utils.unwrapObservable(valueAccessor());
var bindings = allBindingsAccessor();
if (bindings.fileObjectURL && ko.isObservable(bindings.fileObjectURL)) {
var oldUrl = bindings.fileObjectURL();
if (oldUrl) {
windowURL.revokeObjectURL(oldUrl);
}
bindings.fileObjectURL(file && windowURL.createObjectURL(file));
}
if (bindings.fileBinaryData && ko.isObservable(bindings.fileBinaryData)) {
if (!file) {
bindings.fileBinaryData(null);
} else {
var reader = new FileReader();
reader.onload = function(e) {
bindings.fileBinaryData(e.target.result);
};
reader.readAsArrayBuffer(file);
}
}
}
不幸的是,我不明白我是否可以重用此代码并将其集成到一些拖放文件上传组件中?
有没有现成的DnD文件上传组件可以搭配knockout + webapi使用?