Trying to upload a file with ASP.NET MVC

后端 未结 4 684
庸人自扰
庸人自扰 2021-02-10 02:44

I am trying to upload a file with ASP.NET MVC.

The following code work perfectly fine:

// Read in the image data.
byte[] binaryData = null;
HttpPostedFil         


        
相关标签:
4条回答
  • 2021-02-10 03:29

    Remember you also need to open your form like this:

    <form enctype="multipart/form-data" ...
    
    0 讨论(0)
  • 2021-02-10 03:33

    Not sure if this is relevant to the question, but I've just found a way to get model binding for HttpPostedFileBase working, within complex objects. Unfortunately I had to make a change to the ASP.NET MVC source code, so it isn't for everybody.

    In System.Web.Mvc.ValueProviderDictionary.PopulateDictionary(), the value provider is being populated with the contents of Request.Form, Request.QueryString, and RouteData - but NOT Request.Files. Add the following lines to "fix" this (I say "fix" because there may be a reason the ASP.NET MVC team didn't do it in the first place).

    HttpFileCollectionBase files = ControllerContext.HttpContext.Request.Files;
    if (files != null)
    {
        string[] keys = files.AllKeys;
        foreach (string key in keys)
        {
            HttpPostedFileBase file = files[key];
            ValueProviderResult result = new ValueProviderResult(file, file.FileName, currentCulture);
            AddToDictionaryIfNotPresent(key, result);
        }
    }
    
    0 讨论(0)
  • 2021-02-10 03:34

    No bloody way :(

    I figured out that answer and it's pretty lame.

    I had to have the argument NAME being identical to the Id/Name values of the input type="file" element!!! (not sure if it's either or both element values ... i didn't check that bit out).

    so this is the answer.

    Html input element. (note the value of the Id/Name)

    <input type="file" id="imageFileName" name="imageFileName" class="upload" />
    

    Controller method

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create([Bind(Include = "Subject, Content")]Post post,
        HttpPostedFileBase imageFileName)
    {
    ...
    }
    

    shees!

    0 讨论(0)
  • 2021-02-10 03:42

    For the past week i have been building an upload/file manager system for my MVC project and my original attempt was to post additional post data with the multipart files values. this proved too difficult for my time constraints. my approach now is to create the "respective record" to which files/images may be 'attached' (as it is in my case), -then- upload ('attach') the files/images after the record is present.

    for example: 1) create event record, 2) attach images with upload control

    My action that receives the multipart post uses the concepts from Hanselman's post.

    I cant say i've tried the built-in complex-type binding for files (HttpPostedFileBase) but i'd suggest that it would be more complex than my present solution given that from reading the post Hanselman wrote above - i've learned that the files collection returned in the Request is only a loosely typed collection.

    I'd suggest sticking to your original code and trying to make that more safe for your purposes.

    0 讨论(0)
提交回复
热议问题