mvc file控件無(wú)刷新異步上傳操作源碼
前言
上傳文件應(yīng)該是很常見(jiàn)必不可少的一個(gè)操作,網(wǎng)上也有很多提供的上傳控件。今天遇到一個(gè)問(wèn)題:input控件file無(wú)法進(jìn)行異步無(wú)刷新上傳。真真的感到別扭。所以就嘗試這去處理了一下。主要分三個(gè)部分:上傳類(lèi)的封裝,html input控件file處理和后臺(tái)controller的調(diào)用。
上傳封裝類(lèi):
此類(lèi)主要兩個(gè)功能,一些簡(jiǎn)單的篩選和文件重命名操作。
文件的篩選包括:
文件類(lèi)型,文件大小
重命名:
其中默認(rèn)為不進(jìn)行重命名操作,其中重命名默認(rèn)為時(shí)間字符串DateTime.Now.ToString("yyyyMMddHHmmss")
文件地址:
可進(jìn)行自定義。相對(duì)地址與絕對(duì)地址都可以。
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()
{
}
//錯(cuò)誤信息
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">文件類(lèi)型</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 = "文件類(lèi)型不支持";
return false;
}
if (isrename)
FileName = DateTime.Now.ToString("yyyyMMddHHmmss") + fileExt;
FileName = filex.FileName;
FullName = Path.Combine(filepath, FileName);
file.SaveAs(FullName);
return true;
}
}
}
上傳文件的方法在這也沒(méi)有什么過(guò)得的介紹??创a注釋?xiě)?yīng)該都好理解。
頁(yè)面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>
注:因?yàn)閙vc上傳文件input控件file不支持異步無(wú)刷新上傳,故此用調(diào)用跳轉(zhuǎn)到iframe的方式進(jìn)行上傳無(wú)刷新操作。
以上頁(yè)面就是上傳控件的html定義。有幾點(diǎn)要注意的
1.enctype="multipart/form-data"必須加上,表單中enctype="multipart/form-data"的意思,是設(shè)置表單的MIME編碼。默認(rèn)情況,這個(gè)編碼格式是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)制的方式傳過(guò)去。
2.form的name 要加上
3.提交按鈕是submit,當(dāng)然你如果想寫(xiě)js 設(shè)置成button也成。這個(gè)沒(méi)什么好說(shuō)的。
4.iframe 中style="display: none"
以上就是整個(gè)的布局和提交上傳文件到后臺(tái),并且跳轉(zhuǎn)到ifrom中,接下來(lái)就是接受調(diào)用上面上傳文件的方法。然后在iframe頁(yè)面提示上傳結(jié)果,然后把iframe關(guān)閉即可。
后臺(tái)代碼:
[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(錯(cuò)誤提示),F(xiàn)ullName (全名稱), FileName文件名稱進(jìn)行操作
4.window.top.close()關(guān)閉當(dāng)前iframe的窗口,針對(duì)于兼容性請(qǐng)大家自行處理,我測(cè)試的沒(méi)有問(wèn)題。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringMVC文件上傳 多文件上傳實(shí)例
- Spring MVC中上傳文件實(shí)例
- asp.net MVC實(shí)現(xiàn)無(wú)組件上傳圖片實(shí)例介紹
- Asp.net實(shí)現(xiàn)MVC處理文件的上傳下載功能實(shí)例教程
- 用Fine Uploader+ASP.NET MVC實(shí)現(xiàn)ajax文件上傳[代碼示例]
- 用Html5與Asp.net MVC上傳多個(gè)文件的實(shí)現(xiàn)代碼
- asp.net MVC實(shí)現(xiàn)簡(jiǎn)單的上傳功能
- SpringMVC上傳圖片與訪問(wèn)
- ASP.NET?MVC5實(shí)現(xiàn)文件上傳與地址變化處理(5)
- 使用jQuery.form.js/springmvc框架實(shí)現(xiàn)文件上傳功能
相關(guān)文章
ASP.NET中Validation驗(yàn)證控件正則表達(dá)式特殊符號(hào)的說(shuō)明
本文介紹asp.net中RegularExpressionValidator控件中的幾種特殊字符串使用規(guī)則,并做了代碼演示,希望對(duì)大家有所幫助。2016-04-04
WPF中button按鈕同時(shí)點(diǎn)擊多次觸發(fā)click解決方法
這篇文章主要為大家詳細(xì)介紹了WPF中button按鈕同時(shí)點(diǎn)擊多次觸發(fā)click的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
c# rabbitmq 簡(jiǎn)單收發(fā)消息的示例代碼
這篇文章主要介紹了c# rabbitmq 簡(jiǎn)單收發(fā)消息的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
asp.net頁(yè)面master頁(yè)面與ascx用戶控件傳值的問(wèn)題
aspx 頁(yè)面,master頁(yè)面與ascx用戶控件傳值的問(wèn)題2010-03-03
asp.net 簡(jiǎn)單工廠模式和工廠方法模式之論述
簡(jiǎn)單工廠模式的最大優(yōu)點(diǎn)在于工廠類(lèi)中包含了必要的邏輯判斷,根據(jù)客戶端的選擇條件動(dòng)態(tài)實(shí)例化相關(guān)的類(lèi),對(duì)于客戶端來(lái)說(shuō),去除了于具體產(chǎn)品的依賴2011-12-12
asp.net 相關(guān)文章實(shí)現(xiàn)方法
大家或許會(huì)覺(jué)得很驚訝:為什么靈感之源會(huì)討論SQL?或許應(yīng)該這樣說(shuō)吧:搞業(yè)務(wù)系統(tǒng),不跟SQL扯上關(guān)系似乎比較難。2009-05-05

