2015-09-11 39 views
0

我正在上傳文件,爲此我在jQuery ajax中使用FormData對象並將它傳遞給ASP.NET MVC WEB API,它工作正常,我能夠獲取文件在服務器端,但我想通過相同的請求傳遞一些額外的細節。如何將FormData中的其他數據發送到web api

我可以在標題中添加額外的數據,並且我可以在服務器端從頭文件中獲取數據,但是我也會爲移動應用使用相同的API。所以如果我可以將數據作爲函數的參數傳遞,那麼它會很好。

那麼如何在formData對象中傳遞額外的數據以及如何在服務器端獲取它呢?

我的代碼,

function uploadEvaluationFile() { 

    var files = $("#file_UploadFile1").get(0).files; 
    if (files.length > 0) { 
     if (window.FormData !== undefined) { 
      var data = new FormData(); 
      for (var x = 0; x < files.length; x++) { 
       data.append("file1" + x, files[x]); 
      } 


data.append("UserId", 5); 
      data.append("ArtCategory", 5); 
      data.append("Title", "Title1"); 
      data.append("Description", "Desc 1"); 

      $.ajax({ 
       type: "POST", 
       url: '/Home/saveEvaluationFile', 
       contentType: false, 
       processData: false, 
       data: data, 
       async: false, 
       beforeSend: function (xhr) { 
        xhr.setRequestHeader('identifier', 111); 
        xhr.setRequestHeader('oldFileName', 222); 
       }, 
       dataType: "json", 
       success: function (result) { 
        console.log(result); 
       }, 
       error: function (err) { 
        console.log(err); 
       } 
      }); 
     } else { 
      alert("This browser doesn't support HTML5 file uploads!"); 
     } 
    } 
} 

網絡API代碼,

[HttpPost] 
     public async Task<JsonResult> saveEvaluationFile(EvaluationFileDetails FileData) 
     { 
      IEnumerable<string> headerValues = Request.Headers.GetValues("oldFileName"); 
      var oldFileName = headerValues.FirstOrDefault(); 
      IEnumerable<string> headerValues1 = Request.Headers.GetValues("identifier"); 
      var newFileName = headerValues1.FirstOrDefault(); 

      try 
      { 
       foreach (string file in Request.Files) 
       { 
        HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase; 
       } 
      } 
      catch (Exception) 
      { 
       return Json("Upload failed"); 
      } 

      return Json("File uploaded successfully"); 
     } 

我的班級,

public class EvaluationFileDetails 
    { 
     public HttpPostedFileBase file1 { get; set; } 
     public int UserId { get; set; } 
     public int ArtCategory { get; set; } 
     public string Title { get; set; } 
     public string Description { get; set; } 

    } 
+0

可能重複[如何追加整套模型在MVC以FORMDATA和獲得它](http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc) –

+0

我不能通過HttpPostedFileBase,因爲我我沒有使用表單標籤。在對象中,我也可以添加文件。 ? –

+1

不確定你的意思。你可以使用FormData傳遞任何你想要的東西。但是如果你只是爲你的方法添加參數(例如模型),你會發現這很容易,所以你沒有訪問值的形式請求' –

回答

2

您可以使用同樣喜歡

data.append("file1" + x, files[x]); 

例如:

formdata.append('Key', 'Value'); 

獲取數據

[HttpPost] 
public async Task<JsonResult> saveEvaluationFile(FileModel model) 
{ 
    foreach (string image in model.images) 
    { 
    HttpPostedFileBase hpf = model.images[image ] as HttpPostedFileBase; 
    // nesasary save part 
    } 

文件添加到模型

public class FileModel 
{ 
... 
public HttpPostedFileBase File1 { get; set; }//one file 
public IEnumerable<HttpPostedFileBase> images {get;set;}//file collection 
} 
+0

,我也可以添加文件。 ? –

+0

是的,你可以。請參閱修改後的答案 – Iceburg

+0

請檢查我的更新問題,我添加了類,並且我正在獲取除文件外的所有數據。file1屬性在服務器端爲空 –

相關問題