JQuery fileupload插件实现文件上传功能
道理相通,我简单分享下在.netMVC下的实装。
1.制作Model类
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
namespaceRCRS.WebApp.LG.EM.Models
{
//----------------------------------------------------------------
///<summary>
///Import画面用
///</summary>
//----------------------------------------------------------------
publicclasstmp_UploadFile
{
///<summary></summary>
publicHttpPostedFileBaseFileName{get;set;}
}
}
2.实装controller里的对应方法,我这个处理逻辑比较复杂,懒得修改了,反正就这个意思
//----------------------------------------------------------------
///<summary>
///アップロード
///</summary>
///<returns></returns>
//----------------------------------------------------------------
[HttpPost]
publicvirtualActionResultUploadFile()
{
HttpPostedFileBaseuploadedFile=Request.Files["FileName"];
stringmessage="アップロード失敗しました。";
boolisUploaded=false;
stringpath="";
stringdateTimeNow=DateTime.Now.ToString("yyMMdd-hhmmss");
stringuserName=User.Identity.GetUserName();
stringuploadMsg=string.Empty;
if(uploadedFile!=null&&uploadedFile.ContentLength!=0)
{
stringpathForSaving=Server.MapPath("~/App_Data/Uploaded/");
try
{
if(BsnssBihin.IsExcel(uploadedFile.FileName))
{
path=System.IO.Path.Combine(pathForSaving,dateTimeNow+"_"+uploadedFile.FileName);
uploadedFile.SaveAs(path);
isUploaded=BsnssBihin.UploadBihinChange(path,userName,refuploadMsg);
if(isUploaded)
{
message="アップロード成功しました!"+"\n"+uploadMsg;
Logger.Info("[成功]備品アップロード,"+dateTimeNow+","+"["+userName+"]"+"["+path+"]"+uploadMsg);
}
else
{
message="アップロード失敗しました。"+"\n"+uploadMsg;
Logger.Info("[失敗]備品アップロード,"+dateTimeNow+","+"["+userName+"]"+"["+path+"]"+uploadMsg);
}
}
else
{
message="ファイルの形式は不正です。";
}
}
catch(Exceptionex)
{
message=string.Format("失敗しました:{0}",ex.Message);
Logger.Info("[失敗]備品アップロード:"+ex.Message+dateTimeNow+","+"["+userName+"]"+"["+path+"]");
}
}
returnJson(new{isUploaded=isUploaded,message=message},"text/html");
}
3.页面的实装
@modelRCRS.WebApp.LG.EM.Models.tmp_UploadFile
<tablealign="center"style="margin-bottom:200px">
<tr>
<td>
<divstyle="width:470px">
<inputtype="text"id="tbx-file-path"value="ファイルを選択してください"readonly="readonly"/>
</div>
</td>
<td>
<divstyle="width:60px">
<spanclass="btnbtn-primaryfileinput-button">
<span>選択</span>
@Html.TextBoxFor(m=>m.FileName,new{id="file-upload",type="file",accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel"})
</span>
</div>
</td>
<td>
<divstyle="width:60px">
<aclass="btnbtn-primary"href="#"id="hl-start-upload">アップロード</a>
</div>
</td>
</tr>
</table>
<divid="loadingOver"class="loadingOver"></div>
<divid="dvloader"class="dvloader">
<spanclass="labellabel-info"style="align-content:center">処理中、少々お待ちください</span><br/>
<br/>
<imgid="loadingGif"src="../Content/img/loader.gif"alt=""/>
</div>
@sectionscripts{
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/common")
@Scripts.Render("~/bundles/fileupload")
<scripttype="text/javascript">
vardata_upload;
$(document).ready(function(){
'usestrict';
$('#file-upload').fileupload({
url:'../Bihin/UploadFile',
dataType:'json',
add:function(e,data){
data_upload=data;
},
done:function(event,data){
if(data.result.isUploaded){
$("#tbx-file-path").val("ファイルを選択してください");
data_upload="";
}
$("#dvloader").css("display","none");
$("#loadingOver").css("display","none");
alert(data.result.message);
},
fail:function(event,data){
data_upload="";
if(data.files[0].error){
$("#dvloader").css("display","none");
$("#loadingOver").css("display","none");
alert(data.files[0].error);
}
}
});
});
$("#hl-start-upload").on('click',function(){
if(data_upload){
$("#dvloader").css("display","block");
$("#loadingOver").css("display","block");
data_upload.submit();
}
returnfalse;
});
$("#file-upload").on('change',function(){
$("#tbx-file-path").val(this.files[0].name);
});
</script>
}
√,就是这个样子
还附赠了一个简易loding的实现
贴出CSS代码:
.dvloader{
display:none;
position:absolute;
top:40%;
left:40%;
width:20%;
height:20%;
z-index:1001;
text-align:center;
font-size:1.5em;
}
.loadingOver{
display:none;
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
background-color:#f5f5f5;
opacity:0.5;
z-index:1000;
}
这里,多说一嘴:
关于input的accept属性,这里只想读入Excel,所以
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel
更多精彩内容,请点击《jQuery上传操作汇总》,进行深入学习和研究。
以上就是本文的全部内容,希望对大家的学习有所帮助。