最近在做一個網站,用asp.net MVC4.0來開發,今天遇到了個小問題,通過查找相關渠道解決了,在這里把這個問題寫出來,問題非常簡單,不喜勿噴,mark之希望可以給遇到相同問題的初學者一點幫助。
我要實現文件的異步上傳,前端提交的文件后台老是獲取不到。
我前端是這樣寫的:
@using (Ajax.BeginForm("UpdateNewInfo", "Home", new AjaxOptions() { HttpMethod = "post", OnSuccess = "afterAdd" }, new { id = "form1" })) { <table> <td>選擇圖片</td> <td> <input type="file" id="uploadImg" name="fileUpImg" /> <input type="button" id="btnFileUp" value="上傳圖片"/> </td> </tr> </table> }
選擇一張圖片,點擊上傳圖片按鈕,圖片就異步上傳到服務器,提交的是一個Form表單,使用ajaxSubmit來異步上傳文件。
后台獲取文件信息
HttpPostedFileBase postFile = Request.Files["fileUpImg"];
但是postFile對象一直為空,查看Form表單,又顯示有數據,那么問題出在哪里呢?
這個問題困擾了我一上午,然后再博問里提問,馬上就有人指出了我的錯誤。
問題在這里
@using (Ajax.BeginForm("UpdateNewInfo", "Home", new AjaxOptions() { HttpMethod = "post", OnSuccess = "afterAdd" }, new { id = "form1", enctype = "multipart/form-data" }))
原來我們傳文件的時候必須設置Form表單的enctype=”multipart/form-data”
。
表單中enctype=”multipart/form-data”的意思,是設置表單的MIME編碼。默認情況,這個編碼格式是application/x-www-form-urlencoded,不能用於文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數據,進行下面的操作.