Ich habe eine Winkelansicht und Controller, die Benutzerdaten aus verschiedenen Formen sammeln. Die Daten aus dem Angular-Code werden dann an mehrere C# -Klassen übergeben. Die Benutzerdaten kommen derzeit als IEnumerable <> Objekt in C#; Diese Sammlung hat eine Art von FormData, eine benutzerdefinierte Klasse von 6 Eigenschaften (keine Methoden). Alle Benutzerdaten werden über das Objekt IEnumerable <> in der Eigenschaft 'Data' der FormData-Klasse gespeichert, und die Eigenschaft 'Data' ist eine Zeichenfolge. Da 'Data' eine Zeichenfolge ist, werden alle Datei-Uploads, die die C# eingeben, als Zeichenfolge und nicht als tatsächliche Datei eingefügt. Hier ist die Aussicht:Wie kann ich eine Datei über eine AngularJS-Ansicht/Controller in C# -Code-Behind hochladen?
<div data-ng-controller="customFormController as formController" data-ng-init="formController.init(@Model.Form, '@Model.EmailResults', '@Model.EmailTo')">
<div data-ng-if="!formController.loading && !formController.submitted" mc-form data-on-submit="formController.submit(model, formData)" data-on-file-select="formController.fileSelect(e)">
<!--form fields are added dynamically via a separate set of Angular/C# controllers-->
</div>
</div>
Hier ist Teil der Steuerung:
self.submit = function (model, formData) {
var deferred = $q.defer();
var formPostData = {
formId: self.formId,
data: formData,
emailData: self.emailData,
emailTo: self.emailTo,
saveData: true
};
customFormService.postData(formPostData).then(function (result) {
self.submitted = true;
deferred.resolve(result);
window.location.href = '#form-' + self.formId;
// push any files
if (typeof window.FormData !== 'undefined' && result) {
var formData = new FormData();
if (fileList && fileList.length) {
for (var f in fileList) {
if (fileList.hasOwnProperty(f)) {
formData.append('file', fileList[f]);
console.log('Files added to formData property');
}
}
customFormService.postFiles(result.data, formData);
console.log('files posted to customFormService');
}
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
//Here's the file-select method:
self.fileSelect = function (e) {
for (var x = 0; x < e.length; x++) {
fileList.push(e[x]);
}
}
Sorry, das war langatmig. Gibt es eine Möglichkeit, das tatsächliche Dateiobjekt (nicht nur eine JSON-Zeichenfolge) mit dem Angular-Controller zu greifen und auf dieses Objekt in C# zuzugreifen? Danke!
Es gibt viele Ressourcen online, http://monox.mono-software.com/blog/post/Mono/233/Async-upload-using-angular-file-upload-directive-and-net-WebAPI- Service/ist einer von ihnen. Sie benötigen ein HTML-Formular, um es zu tun, da nur ein Browser die Datei über HTTP senden kann, die Sie nicht als JSON senden können. –
@gabriel: Danke, ich habe diesen Beitrag vergessen. Ich war in der Lage, die binären Daten mit einem FileReader() - Objekt zu erhalten, jede Datei als binäre Zeichenfolge zu lesen und diese Dateien über angular in einem Array zu senden. – SammyPayne