2014-07-24 82 views
1

我正在使用knockoutjs和mvc5編寫代碼,其中在ui上選擇圖像,並且通過ajax上傳圖像的二進制文件。Ajax和MVC 5 - 通過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

該視圖是否有必要?我有的問題是使用ajax將ArrayBuffer發佈到控制器。在ajax調用之前我有數據,但它在ajax調用和控制器方法拾取之間的某處消失。 –

+1

您是否檢查過瀏覽器上的網絡選項卡,以驗證服務器上是否存在正確的數據?通常我會在模型中使用HttpPostedFileBase而不是字節[] –

回答

0

我的解決方案是將JavaScript中的ArrayBuffer轉換爲64byte編碼的字符串。然後,我修改了服務器端的對象來接受一個字符串,並瞧。