,,ASP.NET MVC 文件上传教程(一)

,,ASP.NET MVC 文件上传教程(一)

本文主要介绍ASP第一教程。NETMVC文件上传详细说明。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

在本节中,我们将讨论如何在MVC中上传文件。我们再深入了解一下。

Upload File(一)

我们在默认创建的项目中的主控制器下添加以下内容:

公共操作结果上传文件()

{

return View();

}

[HttpPost]

公共操作结果上传文件(HttpPostedFileBase文件)

{

var fileName=file。文件名;

var filePath=Server。MapPath(字符串。Format('~/{0} ',' File ');

文件。另存为(路径。Combine(文件路径,文件名));

return View();

}

将以下内容添加到UploadFile视图中:

form action='/Home/upload file ' method=' post ' enctype=' multipart/form-data '

输入类型='文件'名称='文件'/br /

输入='提交'值='提交'/

/表单

关于观点我们不必多说,只需理解以下两点:

(1)后台使用HttpPostedFileBase接收上传的文件。这个类是一个抽象类,但是在ASP.NET Web表单中没有这样的类。这个类是为了更好的单元测试而出现的。

(2)视图中文件类型的名称应与后台接收到的文件的参数一致。

接下来,让我们演示并看看结果:

我们只是上传了一个Excel文件。接下来,我们通过强类型视图和模型验证来加强上传。

Upload File(二)

我们创建以下BlogModel类:

公共类BlogModel

{

[Display(Name='博客名称')]

[必填(ErrorMessage='请输入您的博客名称!')]

公共字符串BlogName { get设置;}

[Display(Name='博客地址')]

[必填(ErrorMessage='请输入您的博客地址!')]

公共字符串BlogAddress { get设置;}

[Display(Name='博客图片')]

[必填(ErrorMessage='请上传您的博客图片!')]

[验证文件]

public httpostedfilebase blog photo { get;设置;}

}

上述文件的特征尚未验证,只能定制文件特征,如下:

公共类ValidateFileAttribute:validation attribute

{

公共覆盖bool IsValid(对象值)

{

int MaxContentLength=1024 * 1024 * 4;

string[]allowed file extensions=new string[]{ '。jpg ','。gif ','。png ','。pdf ' };

var file=值为HttpPostedFileBase

if (file==null)

返回false

else if(!AllowedFileExtensions。包含(文件。FileName.Substring(文件。FileName.LastIndexOf(' . '))))

{

Error='请上传您的博客图片类型:' string.join(',',allowedFileExtensions);

返回false

}

else if(文件。ContentLength MaxContentLength)

{

错误='上传的图片太大,不能超过4兆:'(maxcontentlength/1024)。tostring()“MB”;

返回false

}

其他

返回true

}

}

我们可以任意设置上传文件的大小。我们将其设置为40兆字节。在配置文件中,我们知道maxRequestLength=4096默认为4兆字节。当然,我们可以改变它的默认设置。

httpRuntime target framework=' 4.5 ' execution time out=' 1100 ' maxRequestLength=' 40960 '/

此时,我们在控制器中修改上面的上传方法:

[HttpPost]

公共操作结果上传文件(BlogModel bModel)

{

if (ModelState。IsValid)

{

var fileName=bModel。BlogPhoto .文件名;

var filePath=Server。MapPath(字符串。Format('~/{0} ',' File ');

bModel。BlogPhoto.SaveAs(路径。Combine(文件路径,文件名));

模型状态。clear();

}

return View();

}

接下来我们来看看效果:

发生了什么事?有点不对劲。我们的文件似乎太大了。看了一下,将近45兆,但是我们设为40兆。所以我们继续修改配置文件中的文件大小,但结果还是一样。我们继续仔细看看这个结果的提示,根据提示找到配置文件下的节点,再试一次。我们在syste.webServer节点下将其设置为2G:

安全

请求过滤

request limits maxAllowedContentLength=' 2147483647 '

/requestLimits

/请求过滤

/安全性

结果就好使了,查了查也有遇到类似问题的人,貌似只有给个结果,却没有给解释,为什么在httpRuntime中设置不行,但是有些这样设置是正确的,这是什么原因?最终找到了答案:

(1)在IIS 5和IIS 6中,默认文件上传的最大为四兆,当上传的文件大小超过四兆时,则会得到错误信息,但是我们通过如下来设置文件大小。

system.web

httpRuntime maxRequestLength=' 2147483647 '执行超时=' 100000 '/

/system.web

(2)在IIS 7中,默认文件上传的最大为28.6兆,当超过其默认设置大小,同样会得到错误信息,但是我们却可以通过如下来设置文件上传大小。

system.webServer

安全

请求过滤

请求限制maxAllowedContentLength=' 2147483647 '/

/请求过滤

/安全性

/system.webServer

【类推的话,个人觉得可能是在IIS 7以上都是通过如上述IIS 7来设置文件上传大小】

虽然我们在服务器端对其进行验证,但是我们觉得这样还是不能保险,我们继续在客户端对其上传的图片类型和大小进行验证。

(1)利用强类型视图给出视图代码:

style type='text/css '。字段验证错误{

颜色:红色;

}

/风格

form id=' upload file sub ' action='/Home/upload file ' method=' post ' enctype=' multipart/form-data '

字段集

传奇/传奇

ul class='lifile '

@Html .LabelFor(m=m.BlogName)br /

@Html .TextBoxFor(m=m.BlogName,new { maxlength=50 })

@Html .(m=m . BlogName)的验证消息

/李

@Html .LabelFor(m=m.BlogAddress)br /

@Html .TextBoxFor(m=m.BlogAddress,new { maxlength=200 })

@Html .(m=m .博客地址)的验证消息br/

/李

@Html .LabelFor(m=m.BlogPhoto)

@Html .TextBoxFor(m=m.BlogPhoto,new { type='file' })

@Html .(m=m .博客照片)的验证消息

span id=' warning ' style=' color:red;'字号:大;/span

/李

输入类型='提交'值='提交' /

/李

/ul

/字段集

/表单

(2)利用脚本获取上传文件大小:

函数GetFileSize(fileid) {

定义变量文件大小=0;

fileSize=$('#' fileid)[0].文件[0]。尺寸;

fileSize=fileSize/1048576;

返回文件大小;

}

(3)根据上传的路径获取文件名称:

函数getNameFromPath(strFilepath) {

var objRE=新regexp(/([^\/\\])$/);

var strName=objre。exec(strfile路径);

if (strName==null) {

返回空

}

否则{

返回strName[0];

}

}

(4)当更换文件时触发Change事件对其文件类型和文件大小进行验证:

$('#BlogPhoto ').change(function () {

var file=getNameFromPath($(this).val());

如果(文件!=null) {

定义变量误差=$(文档)。查找('。字段-验证-错误');

$.每个(错误,函数(k,v) {

if ($(v).attr(' data-valmsg-for ')==='博客照片'){

$(五)。hide();

}

});

var扩展名=文件。substr((文件。lastindexof(' . ')) 1));

开关(分机){

案例“jpg”:

案例"巴布亚新几内亚":

案例“gif”:

案例' pdf ':

fileTypeBool=false

打破;

默认值:

fileTypeBool=true

}

}

if (fileTypeBool) {

$('#warning ').html('只能上传扩展名为jpg、png、gif、pdf的文件!');

返回错误的

}

否则{

var size=get filesize('博客照片');

如果(尺寸4) {

fileSizeBool=true

$('#warning ').html('上传文件已经超过四兆!');

}否则{

fileSizeBool=false

}

}

});

(5)当点击提交按钮时对其进行文件进行验证:

$('#uploadFileSub ').提交(函数(){

$('input[type='text']').每个(函数(k,v) {

if ($(v).长度){

$(五)。兄弟姐妹(' span ').hide();

}

});

if(文件类型bool | |文件大小bool){

返回错误的

}

});

【注意】上述对于验证不是太完整,但是基本的架子已经给出。

接下来我们来完整的演示整个过程。

上述我们一直是利用的纯超文本标记语言代码,当然也可以利用手动音量调节的扩展方法来进行,如下(最终渲染的还是表单,本质上是一致的,就不做过多探讨了)

@使用(Html .BeginForm('UploadFile ',' Home ',FormMethod .Post,new { enctype=' multipart/form-data ' }))

{

输入类型='文件' id='文件'名称='文件'/

输入='提交'值='提交'/

}

结语

本节我们详细描述了如何在MVC中上传文件,但是有一点我们没有提到,那就是我们使用streams将上面提到的图片转换成字节并插入数据库。

上传请参考本文。NET使用流来上传。

这就是本文的全部内容,希望对大家的学习有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: