Je développe une application en asp.net dans laquelle je vais télécharger un fichier mais lorsque j'utilise enctype = "multipart/form-data" la collection de formulaire est vide et lorsque je n'utilise pas enctype, la collection de formulaire a le nom du fichier téléchargé mais Request.Files.count = 0. Je veux obtenir le téléchargement du fichier et aussi le nom du fichier téléchargé dans la collection de formulaire. Une solution ?
Réponses
Trop de publicités?Le paiement s'effectue avec le code suivant :
Ajouter le type d'encodage dans le formulaire de vue en suivant le code suivant :
@using (Html.BeginForm("Create", "Employees", FormMethod.Post,new{ enctype="multipart/form-data"}))
{
@Html.TextBoxFor(model => model.Name)
@Html.TextBoxFor(model => model.Resume, new { type = "file" })
<p>
<input type="submit" value="Save" />
</p>
@Html.ValidationSummary()
}
Ajoutez le code suivant dans l'action respective de votre contrôleur,
[HttpPost]
public ActionResult Create(EmployeeViewModel viewModel)
{
if (Request.Files.Count > 0)
{
foreach (string file in Request.Files)
{
string pathFile = string.Empty;
if (file != null)
{
string path = string.Empty;
string fileName = string.Empty;
string fullPath = string.Empty;
path = AppDomain.CurrentDomain.BaseDirectory + "directory where you want to upload file";//here give the directory where you want to save your file
if (!System.IO.Directory.Exists(path))//if path do not exit
{
System.IO.Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + "directory_name/");//if given directory dont exist, it creates with give directory name
}
fileName = Request.Files[file].FileName;
fullPath = Path.Combine(path, fileName);
if (!System.IO.File.Exists(fullPath))
{
if (fileName != null && fileName.Trim().Length > 0)
{
Request.Files[file].SaveAs(fullPath);
}
}
}
}
}
}
J'ai supposé que le chemin d'accès se trouve dans le répertoire basedirectory..... Vous pouvez indiquer votre propre chemin d'accès où vous souhaitez enregistrer le fichier.
La méthode suivante me convient parfaitement :
@using (Html.BeginForm("someaction", "somecontroller", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="file" />
<button type="submit">Upload</button>
}
Notez que le fichier d'entrée doit avoir un name
qui sera utilisée plus tard dans l'action du contrôleur pour récupérer le fichier. Le fait que vous obteniez Request.File.Count = 0 est une indication très forte que vous n'avez pas fourni de nom à votre champ de saisie.
et l'action :
[HttpPost]
public ActionResult SomeAction(HttpPostedFileBase file)
{
if (file != null && file.ContentLength > 0)
{
var filename = Path.GetFileName(file.FileName);
filename = Path.Combine(Server.MapPath("~/uploads"), filename);
file.SaveAs(filename);
}
return View();
}
et si vous voulez utiliser la collection de formulaires (ce que je ne recommande pas) :
[HttpPost]
public ActionResult SomeAction()
{
var file = Request.Files["file"];
if (file != null && file.ContentLength > 0)
{
var filename = Path.GetFileName(file.FileName);
filename = Path.Combine(Server.MapPath("~/uploads"), filename);
file.SaveAs(filename);
}
return View();
}
Vous pouvez également consulter le site article de blog suivant .
Qu'en est-il de l'utilisation de :
@Microsoft.Web.Helpers.FileUpload.GetHtml("File", 1, false, false, null, null)
Ensuite, dans votre contrôleur :
public ActionResult YourAction()
{
Request.Files[0]; //Check this out !
}
Plus d'informations :
StackOverFlow : https://stackoverflow.com/a/5060318
Tallan Blog : http://blog.tallan.com/2011/02/04/using-mvc3-razor-helpers-and-jcrop-to-upload-and-crop-images/