Коллекция форм пуста, когда я использую enctype для загрузки файла - PullRequest
2 голосов
/ 18 марта 2012

Я разрабатываю приложение на asp.net, в которое я собираюсь загрузить файл, но когда я использую enctype = "multipart / form-data" Коллекция форм пуста, а когда я не использую enctype, коллекция форм имеет имя загрузка файла, но Request.Files.count = 0. Я хочу получить загрузку файла, а также имя загрузки файла в коллекции форм. Любое решение?

Ответы [ 3 ]

1 голос
/ 18 марта 2012

Проверьте со следующим кодом:

Добавьте тип кодировки в виде вида следующим кодом:

@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()
}

Добавьте следующий код в соответствующее действие вашего контроллера,

[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);
                        }
                    }
                }
            }
        }
}

Я предполагаю, что путь будет внутри каталога basedirectory .... Вы можете указать свой собственный путь, куда вы хотите сохранить файл

0 голосов
/ 20 марта 2012

Как насчет использования:

@Microsoft.Web.Helpers.FileUpload.GetHtml("File", 1, false, false, null, null)

Тогда в вашем контроллере:

public ActionResult YourAction()
{
    Request.Files[0]; //Check this out !
}

Дополнительная информация:

StackOverFlow: https://stackoverflow.com/a/5060318

Блог Tallan: http://blog.tallan.com/2011/02/04/using-mvc3-razor-helpers-and-jcrop-to-upload-and-crop-images/

0 голосов
/ 18 марта 2012

У меня хорошо работает следующее:

@using (Html.BeginForm("someaction", "somecontroller", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file" />
    <button type="submit">Upload</button>
}

Обратите внимание, что для ввода файла должен быть указан name, который будет использоваться позже в действии контроллера для извлечения файла.Тот факт, что вы получаете Request.File.Count = 0, является очень убедительным свидетельством того, что вы не указали имя для поля ввода.

и действие:

[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();
}

и если вы хотите использовать FormCollection (что я бы не рекомендовал):

[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();
}

Вы также можете оформить следующую запись в блоге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...