2 votes

La collection de formulaires est vide lorsque j'utilise l'enctype pour le téléchargement de fichiers.

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 ?

1voto

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.

0voto

Darin Dimitrov Points 528142

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 .

0voto

Galhem Points 130

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/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X