2013-09-02 37 views
6

Tôi sử dụng Góc kết hợp với MVC. Khi tôi muốn tải lên một tệp, số HttpPostedFileBase là không.HttpPostedFileBase là null khi tải lên tệp với Angular

html:

<input type="file" data-ng-model="fileName" onchange="angular.element(this).scope().fileInputChanged(this)"> 

góc:

scope.fileInputChanged = function (element) { 
    scope.$apply(function (scope) { 
     console.log('files:', element.files); 

     _.each(element.files, function (element, index, list) { 
      scope.files.push(element); 
     }); 
    }); 
} 

scope.uploadDocuments = function() { 
    var formData = new FormData(); 

    // add uploaded files to form data object 
    for(var i in scope.files){ 
     formData.append("uploadedFile", scope.files[i]); 
    } 

    // create xml http request object 
    var httpRequest = new XMLHttpRequest(); 
    httpRequest.upload.addEventListener("progress", uploadProgress, false); 
    httpRequest.addEventListener("load", uploadComplete, false); 
    httpRequest.addEventListener("error", uploadFailed, false); 
    httpRequest.addEventListener("abort", uploadCanceled, false); 
    httpRequest.open("POST", "/Customer/UploadDocuments"); 

    // make progress bar visible 
    scope.progressVisible = true; 

    // send the request to the server with the form data 
    httpRequest.send(formData); 
} 

// Private functions 
function uploadProgress(event) { 
    scope.$apply(function() { 
     if (event.lengthComputable) { 
      scope.progressValue = Math.round(event.loaded * 100/event.total); 
     } 
     else { 
      scope.progressValue = "Kan progressie niet berekenen"; 
     } 
    }); 
} 

function uploadComplete(event) { 
    scope.hideForm(false); 
} 

function uploadFailed(event) { 
    alert("Het uploaden van de documenten is mislukt."); 
} 

function uploadCanceled(event) { 
    scope.$apply(function() { 
     scope.progressVisible = false; 
    }); 
} 

MVC:

public void UploadDocuments(HttpPostedFileBase file) 
{ 

} 

đây là cách tiêu đề yêu cầu của tôi trông giống như:

Accept:*/* 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8,nl;q=0.6 
Connection:keep-alive 
Content-Length:380863 
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryc67wmYYq1T5VAMlT 
Cookie:ASP.NET_SessionId=rgwgky0zymvb2ppg3jozrn2s; __ngDebug=false; .ASPXAUTH=A54883879090E307D871F8293C805B3B50D1DDFAD1CE5B05D7284426D895370CBBD75D25B7012D384A69CAB265783BDA8F05B1BA02E0121814F45B39E15520EC35408F19DF3345B5DB7F5502886D8696 
Host:localhost:15982 
Origin:http://localhost:15982 
Referer:http://localhost:15982/ 
User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 

Và ở đây tải trọng:

------WebKitFormBoundaryc67wmYYq1T5VAMlT 
Content-Disposition: form-data; name="uploadedFile"; filename="deukjes_deur_2.jpg" 
Content-Type: image/jpeg 

Tôi phải làm gì để làm việc này?

Trả lời

7

Đó là vì bạn đã cung cấp dữ liệu biểu mẫu tên là uploadedFile, nhưng hành động của bạn có thông số có tên file. Thay đổi tên thông số, như vậy:

public void UploadDocuments(HttpPostedFileBase uploadedFile) 
{ 
} 
+0

Tôi đã tự tìm ra. Tôi đã thấy nó khi tôi đăng câu hỏi này. Dù sao cũng cảm ơn bạn!! – Martijn

+0

Tôi chỉ muốn nói, điều này đã giải quyết được một vấn đề rất bực bội mà tôi đã gặp phải! Cảm ơn rất nhiều vì điều đó! Tôi sẽ mạo hiểm để đoán đây là vấn đề mà 90% những người có vấn đề cố gắng để thực hiện điều này đang gặp phải. Vì vậy, tôi hy vọng câu trả lời này sẽ nhận được nhiều khả năng hiển thị hơn! – Brandon

+0

@Brandon Vui vì nó đã giúp, tôi chỉ biết để tìm điều này đầu tiên bây giờ bởi vì tôi đã dành quá nhiều thời gian cố gắng để sửa chữa nó bản thân mình :). Đó là một nguyên nhân rất phổ biến khi các giá trị là null trên bài đăng (không chỉ các tệp) – mattytommo

Các vấn đề liên quan