2017-03-02 12 views
1

Ich habe eine Funktion in meinem Controller, die eine Datei von einem AJAX-Aufruf gesendet und speichert es in einem angegebenen Pfad. Ich habe mich gefragt, wie ich das mit einem Modell machen könnte, da ich hoffe, mehr Daten als nur das Bild zu senden.Machen Sie IFormFile Funktion, um mit Modell zu arbeiten

Ansichtsmodell:

public class PhotoViewModel 
{ 
    // Other strings 

    public IFormFile userimage { get; set; } 
} 

Controller: Ohne Modell (Arbeits)

[HttpPost] 
public async Task<IActionResult> Post(IFormFile file) 
{ 
    var filePath = Path.GetFullPath(@"C:\Users\me\documents\" + file.FileName); 

    if (file.Length > 0) 
    { 
     using (var stream = new FileStream(filePath, FileMode.Create)) 
     { 
      await file.CopyToAsync(stream); 
     } 
    } 

    return StatusCode(200); 
} 

Versuch Version mit Modell:

[HttpPost] 
public async Task<IActionResult> PhotoData(PhotoViewModel model) 
{ 
    var filePath = Path.GetFullPath(@"C:\Users\me\documents\" + model.userimage.FileName); 

    if (ModelState.IsValid) 
    { 
     if (model.userimage.Length > 0) 
     { 
      using (var stream = new FileStream(filePath, FileMode.Create)) 
      { 
       await model.userimage.CopyToAsync(stream); 
      } 
     } 
    } 

    return StatusCode(200); 
} 

Dieser Versuch bringt mich nicht weit. Durch das Setzen eines Haltepunkts kann ich feststellen, dass es beim Festlegen von filePath fehlschlägt, aber ich bin mir nicht sicher, wie ich mit dem Modell arbeiten soll. Jede Hilfe wird geschätzt.

Antwort

0

Welche Fehlermeldung erhalten Sie und welcher clientseitige Code wird zum Senden der API-Anfrage verwendet?

Sie müssen ein FormData-Objekt verwenden und das FormData-Objekt mit den erforderlichen Eigenschaften füllen.

var formData = new FormData(); 
formData.append(add PhotoViewModel properties) 
formData.append(userimage, <file>); 
Verwandte Themen