我正在使用knockoutjs和mvc5编写代码,其中在ui上选择了图像,图像的二进制文件通过ajax上传。
我无法真正展示图片上传的内容,但我知道它有效。该图像是浏览器的本地图像,二进制文件存储在视图模型中。
问题是将此二进制文件上传到mvc。
在我的javascript中,我正在使用以下内容构建帖子:
var customerData = {
CustomerName: self.CustomerName(),
CustomerImage: self.CustomerImage().imageBinary(),
CustomerJobNumber: self.CustomerJobNumber()
};
//If add, enable remaining area, change id, and start customer edit
if (window.location.hash == "#customer-add") {
$.ajax({
type: 'POST',
url: "/Customer/SaveNew",
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify(customerData),
success: function(data) {
/*CODE*/
var title = data.title;
var msg = data.message;
if (data.success == 0) {
//growl as to why
} else {
//growl success
window.location.hash = "#customer-edit-" + data.newCustomer.CustomerId;
self.SetCustomerFields(data.newCustomer);
self.LoadCustomers();
}
},
error: function(err) {
alert(err);
//growl
}
});
}
在我的控制器中,我有:
public class NewCustomerData
{
public string CustomerName { get; set; }
public byte[] CustomerImage { get; set; }
public string CustomerJobNumber { get; set; }
}
[HttpPost]
public ActionResult SaveNew(NewCustomerData data)
{
//Does stuff
}
当我进入javascript运行时,我发送的CustomerImage对象是ArrayBuffer类型。如果我将它转换为Uint8Array,我可以验证是否有内容。但二进制文件永远不会出现在控制器中。
我没有指定正确的c#对象吗?
答案 0 :(得分:0)
我的解决方案是将javascript中的ArrayBuffer转换为64byte编码的字符串。然后,我修改了服务器端的对象以接受字符串,然后瞧。