1.Form表单提交
1
2
3
4
5
|
<p>Form提交</p> <form
action= "@Url.Action(" SavePictureByForm ")" enctype= "multipart/form-data" method= "post" > <input
id= "pic" name= "pic" type= "file" /> <input
type= "submit" value= "提交" /> </form> |
2.Ajax.BeginForm,原理也是Form表单提交
1
2
3
4
5
6
|
<p>Ajax.BeginForm</p> @using(Ajax.BeginForm( "SavePictureByForm" , null , new AjaxOptions()
{ OnSuccess = "PostSuc" ,
OnFailure = "PostFail" ,
HttpMethod = "Post" }, new {enctype
= "multipart/form-data" })) { <input
type= "file" name= "pic" id= "pic" multiple= "multiple" /> <input
type= "submit" value= "提交" /> } |
以上两种方式,在后台用同一种方法可以获取数据: 但是这两种方法会造成页面刷新,有时会影响用户操作.
1
2
3
4
5
6
7
8
9
10
11
|
public ActionResult
SavePictureByForm() { HttpFileCollectionBase
files = Request.Files; var file
= files[0]; bool isOk
= false ; string msg
= string .Empty; //....OtherDO return Content( "<script>window.location.href='/home/index';</script>" ); } |
3.Ajax提交 用此方法需要用到FileReader类,再获取到文件的Base64数据,将Base64数据Post过去
1
2
3
4
|
<p>Ajax:以上传图片为例</p> <input
type= "file" id= "picAjax" /> <input
type= "button" id= "submitPic" value= "提交" /> <img
id= "selImg" src= "" alt= "用作图片预览" /> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
var picString
= "" ; $( function ()
{ $( "#picAjax" ).change( function (e)
{ var file
= e.delegateTarget.files[0]; //在此可以对选择的文件进行判断:文件类型
文件大小等 //..... var reader
= new FileReader(); reader.readAsDataURL(file); reader.onload
= function (ret)
{ picString
= reader.result //预览图片 $( "#selImg" ).attr({ "src" :
picString }); } }); $( "#submitPic" ).click( function ()
{ $.ajax( "home/SavePicture" ,
{ type: "post" , datatype: "json" , data:
picString, error: function ()
{ }, success: function (result)
{ if (result)
{ alert(result.msg); } } }); }); |
后端接收
1
2
3
4
5
6
7
8
9
10
|
[HttpPost] public ActionResult
SavePicture( string picString) { bool isOk
= false ; string msg
= string .Empty; //其他操作 //......... //......... return Json( new {
suc = isOk, msg = msg }); } |
第三种方法做到了真正异步提交.但是如果选择的文件较大,可能会出现问题(未测试).
对于图片预览 前两种方法也可用base64数据进行图片预览.