J'ai cette forme de mon point de vue:
<!-- 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='http://stackoverflow.com/'" />
</form>
Et ce code dans mon 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();
}
}
En fonction de chaque exemple de code que j'ai pu trouver, cela semble être la façon de le faire. J'ai essayé avec de petits et de gros fichiers, avec aucune différence dans le résultat. Le champ de formulaire contient toujours le nom de fichier qui correspond à ce que j'ai choisi, et de la Demande.Les fichiers de la collection est toujours vide.
Je ne pense pas que c'est pertinent, mais je suis en utilisant le VS Serveur Web de Développement. Autant que je sache, il prend en charge les téléchargements de fichiers le même que IIS.
Il se fait tard et il y a une chance que je suis absent quelque chose d'évident. Je serais reconnaissant de tout conseil.