Ich verwende asp.net mvc 4 webapi beta, um einen Rest-Service zu erstellen. Ich muss in der Lage sein, POST-Bilder / -Dateien von Clientanwendungen zu akzeptieren. Ist das mit dem Webapi möglich? Unten sehen Sie, wie ich die Aktion derzeit verwende. Kennt jemand ein Beispiel, wie das funktionieren soll?
[HttpPost]
public string ProfileImagePost(HttpPostedFile profileImage)
{
string[] extensions = { ".jpg", ".jpeg", ".gif", ".bmp", ".png" };
if (!extensions.Any(x => x.Equals(Path.GetExtension(profileImage.FileName.ToLower()), StringComparison.OrdinalIgnoreCase)))
{
throw new HttpResponseException("Invalid file type.", HttpStatusCode.BadRequest);
}
// Other code goes here
return "/path/to/image.png";
}
c#
asp.net-mvc-4
Phil
quelle
quelle
Request.Files
Antworten:
siehe http://www.asp.net/web-api/overview/formats-and-model-binding/html-forms-and-multipart-mime#multipartmime , obwohl ich denke, dass der Artikel es etwas komplizierter erscheinen lässt als ist es wirklich.
Grundsätzlich,
quelle
MultipartFormDataStreamProvider
macht keineBodyPartFileNames
Eigenschaft mehr verfügbar, ich habeFileData.First().LocalFileName
stattdessen verwendet.Ich bin überrascht, dass viele von Ihnen anscheinend Dateien auf dem Server speichern möchten. Die Lösung, um alles im Speicher zu behalten, lautet wie folgt:
quelle
File.WriteAllBytes(filename, buffer);
um es in eine Datei zu schreibenSiehe den folgenden Code aus diesem Artikel , der den einfachsten Beispielcode zeigt, den ich finden konnte. Es enthält sowohl Datei- als auch Speicher- Uploads (schneller).
quelle
Der ASP.NET Core-Weg ist jetzt hier :
quelle
Hier ist eine schnelle und schmutzige Lösung, die hochgeladene Dateiinhalte aus dem HTTP-Body entnimmt und in eine Datei schreibt. Ich habe ein HTML / JS-Snippet "Bare Bones" für den Datei-Upload hinzugefügt.
Web-API-Methode:
Hochladen von HTML-Dateien:
quelle
Ich habe die Antwort von Mike Wasson verwendet, bevor ich alle NuGets in meinem Webapi MVC4-Projekt aktualisiert habe. Nachdem ich dies getan hatte, musste ich die Aktion zum Hochladen von Dateien neu schreiben:
Anscheinend ist BodyPartFileNames im MultipartFormDataStreamProvider nicht mehr verfügbar.
quelle
ReadAsMultipartAsync
und ii) inFile.Move
? 2) Könnten Sie tunasync File.Move
?In diese Richtung poste ich Client- und Server-Snipets, die Excel-Dateien mit WebApi senden, c # 4:
Und der Server-Webapi-Controller:
Und der benutzerdefinierte MyMultipartFormDataStreamProvider musste den Dateinamen anpassen:
PS: Ich habe diesen Code einem anderen Beitrag entnommen: http://www.codeguru.com/csharp/.net/uploading-files-asynchronously-using-asp.net-web-api .htm
quelle
static method SetFile
in Ihrem Controller anrufen ?path
Cloud-Speichers.quelle
Hier sind zwei Möglichkeiten, eine Datei zu akzeptieren. Eine verwendet im Speicheranbieter MultipartMemoryStreamProvider und eine verwendet MultipartFormDataStreamProvider, der auf einer Festplatte speichert. Beachten Sie, dass dies jeweils nur für einen Datei-Upload gilt. Sie können dies mit Sicherheit erweitern, um mehrere Dateien zu speichern. Der zweite Ansatz kann große Dateien unterstützen. Ich habe Dateien über 200 MB getestet und es funktioniert gut. Bei Verwendung des In-Memory-Ansatzes müssen Sie nicht auf der Festplatte speichern, es wird jedoch eine Speicherausnahme ausgelöst, wenn Sie eine bestimmte Grenze überschreiten.
quelle
Ich hatte ein ähnliches Problem mit der Vorschau-Web-API. Dieser Teil wurde noch nicht auf die neue MVC 4-Web-API portiert, aber möglicherweise hilft dies:
REST-Datei-Upload mit HttpRequestMessage oder Stream?
Bitte lassen Sie es mich wissen, können Sie sich morgen hinsetzen und versuchen, es erneut umzusetzen.
quelle
Diese Frage hat auch für .Net Core viele gute Antworten. Ich habe beide Frameworks verwendet. Die bereitgestellten Codebeispiele funktionieren einwandfrei. Also werde ich es nicht wiederholen. In meinem Fall war es wichtig, wie man Datei-Upload-Aktionen mit Swagger wie folgt verwendet :
Hier ist meine Zusammenfassung:
ASP .Net WebAPI 2
.NET Core
quelle
API-Controller:
quelle
Ergänzung zu Matt Frears Antwort - Dies wäre eine ASP NET Core-Alternative zum Lesen der Datei direkt aus dem Stream, ohne sie zu speichern und von der Festplatte zu lesen:
quelle