mvc file控件無刷新異步上傳操作源碼
前言
上傳文件應(yīng)該是很常見必不可少的一個操作,網(wǎng)上也有很多提供的上傳控件。今天遇到一個問題:input控件file無法進(jìn)行異步無刷新上傳。真真的感到別扭。所以就嘗試這去處理了一下。主要分三個部分:上傳類的封裝,html input控件file處理和后臺controller的調(diào)用。
上傳封裝類:
此類主要兩個功能,一些簡單的篩選和文件重命名操作。
文件的篩選包括:
文件類型,文件大小
重命名:
其中默認(rèn)為不進(jìn)行重命名操作,其中重命名默認(rèn)為時間字符串DateTime.Now.ToString("yyyyMMddHHmmss")
文件地址:
可進(jìn)行自定義。相對地址與絕對地址都可以。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Web; namespace CommonHelper { public class UploadFile : System.Web.UI.Page { public UploadFile() { } //錯誤信息 public string msg { get; set; } public string FullName { get; set; } //文件名稱 public string FileName { get; set; } /// <summary> /// 文件上傳 /// by wyl 20161019 /// </summary> /// <param name="filepath">文件上傳地址</param> /// <param name="size">文件規(guī)定大小</param> /// <param name="filetype">文件類型</param> /// <param name="files">file上傳的文件</param> /// <param name="isrename">是否重名名</param> /// <returns></returns> public bool upload_file(string filepath, int size, string[] filetype, bool isrename = false) { filepath = Server.MapPath(filepath); //文件夾不存在就創(chuàng)建 if (!Directory.Exists(filepath)) Directory.CreateDirectory(filepath); if (HttpContext.Current.Request.Files.Count == 0) { msg = "文件上傳失敗"; return false; } msg = "上傳成功"; var file = HttpContext.Current.Request.Files[0]; if (file.ContentLength == 0) { msg = "文件大小為0"; return false; } if (file.ContentLength > size * 1024) { msg = "文件超出指定大小"; return false; } var filex = HttpContext.Current.Request.Files[0]; string fileExt = Path.GetExtension(filex.FileName).ToLower(); if (filetype.Count(a => a == fileExt) < 1) { msg = "文件類型不支持"; return false; } if (isrename) FileName = DateTime.Now.ToString("yyyyMMddHHmmss") + fileExt; FileName = filex.FileName; FullName = Path.Combine(filepath, FileName); file.SaveAs(FullName); return true; } } }
上傳文件的方法在這也沒有什么過得的介紹。看代碼注釋應(yīng)該都好理解。
頁面html
<div class="content"> <form method="post" target="hidden_frame" enctype="multipart/form-data" action="/CustomFrom/FormDesign/FileUpload" name="form"> <input class="m input" name="fileName" type="file"> <input class="btn file-input" value="提交..." name="F2" type="submit"> <iframe id="hidden_frame" name="F2" style="display: none"> <html> <head></head> <body></body> </html> </iframe> </form> </div>
注:因為mvc上傳文件input控件file不支持異步無刷新上傳,故此用調(diào)用跳轉(zhuǎn)到iframe的方式進(jìn)行上傳無刷新操作。
以上頁面就是上傳控件的html定義。有幾點要注意的
1.enctype="multipart/form-data"必須加上,表單中enctype="multipart/form-data"的意思,是設(shè)置表單的MIME編碼。默認(rèn)情況,這個編碼格式是application/x-www-form-urlencoded,不能用于文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數(shù)據(jù),進(jìn)行下面的操作. enctype="multipart/form-data"是上傳二進(jìn)制數(shù)據(jù); form里面的input的值以2進(jìn)制的方式傳過去。
2.form的name 要加上
3.提交按鈕是submit,當(dāng)然你如果想寫js 設(shè)置成button也成。這個沒什么好說的。
4.iframe 中style="display: none"
以上就是整個的布局和提交上傳文件到后臺,并且跳轉(zhuǎn)到ifrom中,接下來就是接受調(diào)用上面上傳文件的方法。然后在iframe頁面提示上傳結(jié)果,然后把iframe關(guān)閉即可。
后臺代碼:
[HttpPost] public ActionResult FileUpload() { //從配置文件中獲取支持上傳文件格式 string[] fileType = ConfigurationManager.AppSettings["fileType"].Split('|'); //上傳文件路徑 string strPath = ConfigurationManager.AppSettings["strPath"]; UploadFile file= new UploadFile(); bool flag = file.upload_file(strPath, 25000, fileType); return Content("<script>window.alert('" + file.msg + "');window.top.close()</script>"); }
注:
1.文件路徑,文件保存路徑放在了配置文件中,當(dāng)然你也可以把文件大小,是否重命名都放到配置文件中。
2.返回到view的腳本先彈出提示框;在關(guān)閉窗口
3.根據(jù)你自己的需要去調(diào)用UploadFile的msg(錯誤提示),F(xiàn)ullName (全名稱), FileName文件名稱進(jìn)行操作
4.window.top.close()關(guān)閉當(dāng)前iframe的窗口,針對于兼容性請大家自行處理,我測試的沒有問題。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringMVC文件上傳 多文件上傳實例
- Spring MVC中上傳文件實例
- asp.net MVC實現(xiàn)無組件上傳圖片實例介紹
- Asp.net實現(xiàn)MVC處理文件的上傳下載功能實例教程
- 用Fine Uploader+ASP.NET MVC實現(xiàn)ajax文件上傳[代碼示例]
- 用Html5與Asp.net MVC上傳多個文件的實現(xiàn)代碼
- asp.net MVC實現(xiàn)簡單的上傳功能
- SpringMVC上傳圖片與訪問
- ASP.NET?MVC5實現(xiàn)文件上傳與地址變化處理(5)
- 使用jQuery.form.js/springmvc框架實現(xiàn)文件上傳功能
相關(guān)文章
ASP.NET?Core?MVC中Form?Tag?Helpers用法介紹
這篇文章介紹了ASP.NET?Core?MVC中Form?Tag?Helpers的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02Redis數(shù)據(jù)庫基礎(chǔ)與ASP.NET?Core緩存實現(xiàn)
這篇文章介紹了Redis數(shù)據(jù)庫基礎(chǔ)與ASP.NET?Core緩存實現(xiàn)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02解決AJAX.NET中的懸停panel在頁面加載時閃爍的問題
AJAX.NET的兩個懸停控件.分別是HoverMenuExtender和ModalPopupExtender.他們可以打造很好的懸停效果...通常,我都是用panel來作為懸停內(nèi)容的容器..2009-06-06一步步打造簡單的MVC電商網(wǎng)站BooksStore(1)
這篇文章主要和大家一起一步步打造一個簡單的MVC電商網(wǎng)站,MVC電商網(wǎng)站BooksStore第一篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04實現(xiàn).Net7下數(shù)據(jù)庫定時檢查的方法詳解
在軟件開發(fā)過程中,有時候我們需要定時地檢查數(shù)據(jù)庫中的數(shù)據(jù),并在發(fā)現(xiàn)新增數(shù)據(jù)時觸發(fā)一個動作。為了實現(xiàn)這個需求,本文我們在?.Net?7?下進(jìn)行一次簡單的演示。感興趣的可以了解一下2022-12-12ASP.NET Core跨站登錄重定向的實現(xiàn)新姿勢
這篇文章主要給大家介紹了關(guān)于ASP.NET Core實現(xiàn)跨站登錄重定向的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07ASP.NET Core針對一個使用HttpClient對象的類編寫單元測試詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET Core中如何針對一個使用HttpClient對象的類編寫單元測試的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01