Par*_*als 5 jquery knockout.js
嘿我使用mvc3敲门并尝试使用敲除绑定上传并将上传的图像保存在数据库中.我能够浏览并获取图像,但没有得到如何保存该图像.我的HTML视图是:
<div data-bind="foreach: { data: images, beforeRemove: beforeRemoveSlot }">
<div>
<input type="file" accept="image/*" data-bind="file: imageFile, fileObjectURL: imageObjectURL, fileBinaryData: imageBinary"/>
<div data-bind="if: imageObjectURL">
<img class="thumb" data-bind="attr: { src: imageObjectURL }"/>
</div>
<div>Size: <span data-bind="text: fileSize"></span> bytes</div>
</div>
</div>
<input type="submit" value="Upload Picture" data-bind="click: upload" />
Run Code Online (Sandbox Code Playgroud)
我的观点模型是:
var windowURL = window.URL || window.webkitURL;
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);
}
}
}
};
var imageUploadModel = function () {
var self = {};
var slotModel = function () {
var that = {};
that.imageFile = ko.observable();
that.imageObjectURL = ko.observable();
that.imageBinary = ko.observable();
that.fileSize = ko.computed(function () {
var file = this.imageFile();
return file ? file.size : 0;
}, that);
that.firstBytes = ko.computed(function () {
if (that.imageBinary()) {
var buf = new Uint8Array(that.imageBinary());
var bytes = [];
for (var i = 0; i < Math.min(10, buf.length); ++i) {
bytes.push(buf[i]);
}
return '[' + bytes.join(', ') + ']';
} else {
return '';
}
}, that);
return that;
};
self.beforeRemoveSlot = function (element, index, data) {
if (data.imageObjectURL()) {
windowURL.revokeObjectURL(data.imageObjectURL());
}
$(element).remove();
};
self.images = ko.observableArray([slotModel()]);
self.addSlot = function () {
self.images.push(slotModel());
};
self.removeSlot = function (data) {
self.images.remove(data);
};
return self;
} ();
imageUploadModel.upload = function () {
}
$(document).ready(function () {
ko.applyBindings(imageUploadModel);
});
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我如何在上传按钮上保存图像点击?????
小智 16
这是一个通过淘汰赛单击图片上传的例子我已经擦过了一起
HTML - >
<input type="file" data-bind="value: fileName, fileUpload: fileName, url: url">
<script src="{{ STATIC_URL }}html5knockoutImagePreview.js"></script>?
Run Code Online (Sandbox Code Playgroud)
js - >
ko.bindingHandlers.fileUpload = {
update: function(element, valueAccessor, allBindingsAccessor){
var value = ko.utils.unwrapObservable(valueAccessor())
if(element.files.length && value){
var file = element.files[0];
var url = allBindingsAccessor().url
xhr = new XMLHttpRequest();
xhr.open("post", url, true);
xhr.setRequestHeader("Content-Type", "image/jpeg");
xhr.setRequestHeader("X-File-Name", file.name);
xhr.setRequestHeader("X-File-Size", file.size);
xhr.setRequestHeader("X-File-Type", file.type);
console.log("sending")
// Send the file (doh)
xhr.send(file);
}
}
}
function MainPageViewModal(){
this.fileName = ko.observable()
this.url = "http://127.0.0.1:8000/upload"
}
var mainPageViewModal = new MainPageViewModal()
ko.applyBindings(mainPageViewModal);
Run Code Online (Sandbox Code Playgroud)
我不是100%确定你的所有要求,这是针对jpegs,你需要调整其他类型的内容类型标题等.
编辑
当你继续遇到问题时,这里有一些我从那以后编写的代码可能有所帮助.它确实使用jquery ...
ko bindings - >
ko.bindingHandlers.filePreview = {
update: function(element, valueAccessor, allBindingsAccessor){
var allBindings = allBindingsAccessor()
if(!!FileReader && valueAccessor() && element.files.length){
var reader = new FileReader();
reader.onload = function(event){
var dataUri = event.target.result
allBindings.imagePreview(dataUri)
}
reader.onerror = function(e) {
console.log("error", stuff)
}
reader.readAsDataURL(element.files[0])
}
}
}
Run Code Online (Sandbox Code Playgroud)
modelPageView - >
, uploadPreview: function(files){
var self = this
self.loadingPreview(true)
file = files[0]
if(file.size > 20000000){
alert("that image is a bit too big for us, got anything smaller?")
}
console.log("file size " + file.size)
var formData = new FormData();
formData.append("img", file)
$.ajax({
url: "/YOUR_UPLOAD_URL",
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false
}).done(function(data){
if(data === "error"){
alert("somethign wrong happened, please refresh the page")
return
}
self.imgUrl(data.img_url)
self.imgId(data.img_id)
}).fail(function(){
self.loadingPreview(false)
})
}
Run Code Online (Sandbox Code Playgroud)
HTML - >
<input type="file" accept="image/*" name="img" data-bind="value: img, fileAdded: img, previewFunc: function(files){ $data.uploadPreview(files) }" />
Run Code Online (Sandbox Code Playgroud)
抱歉延迟回复,我会在几天内达到高峰,所以如果你还有问题,请告诉我.
祝好运!
| 归档时间: |
|
| 查看次数: |
16951 次 |
| 最近记录: |