Ich habe dieses Formular aus meiner Sicht:Hochladen von Dateien mit ASP.Net MVC - Name, aber kein Dateistream, was mache ich falsch?
<!-- Bug (extra 'i') right here-----------v -->
<!-- was: <form method="post" enctype="mulitipart/form-data" action="/Task/SaveFile"> -->
<form method="post" enctype="multipart/form-data" action="/Task/SaveFile">
<input type="file" id="FileBlob" name="FileBlob"/>
<input type="submit" value="Save"/>
<input type="button" value="Cancel" onclick="window.location.href='/'" />
</form>
Und diesen Code in meinem Controller:
public ActionResult SaveFile(FormCollection forms)
{
bool errors = false;
//this field is never empty, it contains the selected filename
if (string.IsNullOrEmpty(forms["FileBlob"]))
{
errors = true;
ModelState.AddModelError("FileBlob", "Please upload a file");
}
else
{
string sFileName = forms["FileBlob"];
var file = Request.Files["FileBlob"];
//'file' is always null, and Request.Files.Count is always 0 ???
if (file != null)
{
byte[] buf = new byte[file.ContentLength];
file.InputStream.Read(buf, 0, file.ContentLength);
//do stuff with the bytes
}
else
{
errors = true;
ModelState.AddModelError("FileBlob", "Please upload a file");
}
}
if (errors)
{
return ShowTheFormAgainResult();
}
else
{
return View();
}
}
Basierend auf jedem Codebeispiel habe ich fündig geworden zu sein, das ist wie die Art und Weise scheint TU es. Ich habe es mit kleinen und großen Dateien versucht, ohne Unterschied im Ergebnis. Das Formularfeld enthält immer den Dateinamen, der dem entspricht, was ich gewählt habe, und die Sammlung Request.Files ist immer leer.
Ich glaube nicht, dass es relevant ist, aber ich verwende den VS Development Web Server. AFAIK unterstützt Datei-Uploads genauso wie IIS.
Es wird spät und es gibt eine Chance, dass mir etwas offensichtlich fehlt. Ich wäre dankbar für jeden Rat.
Siehe http://stackoverflow.com/questions/9411563/asp-net-mvc3 -razor-file-upload-gives-zero-as-file-count für ein verwandtes Problem – Lijo