Загрузка файла MVC - PullRequest
       24

Загрузка файла MVC

9 голосов
/ 19 апреля 2009

Со следующей разметкой на мой взгляд:

<form action="Categories/Upload" enctype="multipart/form-data" method="post">
    <input type="file" name="Image">
    <input type="submit" value"Save">
</form>

И в моем контроллере:

public ActionResult Upload(FormCollection form)
{
    var file = form["Image"];
}

Значение файла null. Если я попробую это в другом представлении, используя другой контроллер контроллера, и он будет работать с тем же кодом.

У меня VS2008 на Vista, MVC 1.0.

Почему?

Malcolm

Ответы [ 5 ]

34 голосов
/ 19 апреля 2009

Используйте HttpPostedFileBase в качестве параметра вашего действия. Кроме того, добавьте для атрибута AcceptVerb значение POST.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Upload(HttpPostedFileBase image)
{
    if ( image != null ) {
        // do something
    }
    return View();
}

Этот код полностью соответствует духу / дизайну ASP.NET MVC.

7 голосов
/ 21 июня 2009

Не для того, чтобы быть разборчивым здесь или что-то в этом роде, но вот как должен выглядеть код: Дэниел упускает некоторые мелкие детали в коде, который он предоставил ...

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UploadPlotImage(HttpPostedFileBase image)
{    
    if ( image != null ) 
    {        
        // do something    
    }

    return View();
}
6 голосов
/ 19 апреля 2009

Попробуйте этот код:

    public ActionResult Upload()
    {
        foreach (string file in Request.Files)
        {
            var hpf = this.Request.Files[file];
            if (hpf.ContentLength == 0)
            {
                continue;
            }

            string savedFileName = Path.Combine(
                AppDomain.CurrentDomain.BaseDirectory, "PutYourUploadDirectoryHere");
                savedFileName = Path.Combine(savedFileName, Path.GetFileName(hpf.FileName));

            hpf.SaveAs(savedFileName);
        }

    ...
    }
2 голосов
/ 06 декабря 2011

Даже я столкнулся с проблемой, Значение было нулевым в изображении на

public ActionResult UploadPlotImadge(HttpPostedFileBase image) 

Раньше я не добавлял [AcceptVerbs(HttpVerbs.Post)], который добавил. Даже после добавления, это не сработало, потому что вторая часть, которую я пропустил, enctype="multipart/form-data", должна была быть в теге формы ..

Теперь это работает для меня ....

0 голосов
/ 06 декабря 2011

попробуйте этот класс и ниже действие и исправьте путь к папке в AppSetting.

конфиг:

   <appSettings>
            <add key="UploadFolerPath" value="..Your folder path" />
   </appSettings>

вид: -

<form action="Account/AddImage" id="form_AddImage" method="post"   enctype="multipart/form-data">

            <input type="file" id="Img" name="Img" class="required" />

            <input type="submit" value="Upload" id="btnSubmit" />

</form>

Класс: -

public class FileUpload
{
    public string SaveFileName
    {
        get;
        set;
    }


    public bool SaveFile(HttpPostedFileBase file, string FullPath)
    {
        string FileName = Guid.NewGuid().ToString();

        FileName = FileName + System.IO.Path.GetExtension(file.FileName);

        SaveFileName = FileName;

        file.SaveAs(FullPath + "/" + FileName);
        return true;
    }
}

// Опубликовать действие

    [HttpPost]
    public ActionResult AddImage(FormCollection Form)
    {

        FileUpload fileupload = new FileUpload();
         var image="";

        HttpPostedFileBase file = Request.Files["Img"];

        if (file.FileName != null && file.FileName != "")
        {

            if (upload.ContentLength > 0)
            {

                  fileupload.SaveFile(Request.Files["Img"],    Server.MapPath(AppSetting.ReadAppSetting("UploadFolerPath")));

                image = fileupload.SaveFileName;

                // write here your Add/Save function

                return Content(image);


            }
        }
        else
        {
                   //return....;
        }

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