Ajax和MVC 5 - 通过ajax上传图像二进制文件

时间:2014-07-24 22:10:31

标签: jquery asp.net-mvc knockout.js

我正在使用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#对象吗?

1 个答案:

答案 0 :(得分:0)

我的解决方案是将javascript中的ArrayBuffer转换为64byte编码的字符串。然后,我修改了服务器端的对象以接受字符串,然后瞧。

相关问题