ASP.NET MVC中使用表单上传文件时的注意事项
最近了好久没写ASP.NET 使用HTML的FORM来上传文件了,结果写了个文件上传发现ASP.NET MVC的Controller中老是读取不到上传的文件。
MVC的View(Index.cshtml)如下所示:
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<form action="@Url.Action("Upload")" method="post" >
<input name="filedata" type="file" value="浏览" /><br />
<input type="submit" value="提交" />
</form>
HomeController中读取文件的Action如下所示:
public ActionResult Upload()
{
string folder = @"C:\inetpub\wwwroot\Upload";
var filePath = folder+"\\"+Request.Files["filedata"].FileName.Substring(Request.Files["filedata"].FileName.LastIndexOf("\\")+); if(System.IO.File.Exists(filePath))
{
System.IO.File.Delete(filePath);
} Request.Files["filedata"].SaveAs(filePath); return View("Index");
}
结果上面代码中的Request.Files["filedata"]始终报错,Request.Files.Count也始终为0。
我就纳闷了这明明FORM表单中有一个input为file的组件,为什么http请求post到服务器端后,什么都没读到?
后来经过网上搜索发现,原来如果FORM表单要上传文件必须得加上属性enctype="multipart/form-data"才行。所以将MVC的View(Index.cshtml)改为如下代码:
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<form action="@Url.Action("Upload")" method="post" enctype="multipart/form-data">
<input name="filedata" type="file" value="浏览" /><br />
<input type="submit" value="提交" />
</form>
这一次Request.Files["filedata"]终于读到文件了,Request.Files.Count也为1了。
所以请记住在ASP.NET中如果要使用HTML表单上传文件,有两个需要注意的地方:
- FORM标签的method为post,并且要加上enctype="multipart/form-data"这个属性值
- input file这个组件必须要有属性name,比如在我们这个例子中我们将input file标签的name定义为了filedata,这样我们在ASP.NET的服务器端才能用Request.Files["filedata"]读取到上传的文件。我试了下如果input file不定义name属性,Request.Files.Count也为0,说明ASP.NET完全会忽略不带name属性的input file标签
ASP.NET MVC中使用表单上传文件时的注意事项的更多相关文章
- ASP.NET MVC使用input标签上传文件
有些时间学习了,温习一下ASP.NET MVC了.上传文档是在开发过程中,必须撑握的一个功能.以前上传均是使用第三方控件uploadify来实现,今天使使用VS标准标签input 的type=&quo ...
- asp.net中FileUpload得到上传文件的完整路径
asp.net中FileUpload得到上传文件的完整路径 Response.Write("完整路径:" + Server.MapPath(FileUpload1.PostedFi ...
- MVC应用程序实现上传文件(续)
前几天,有练习了<MVC应用程序实现上传文件>http://www.cnblogs.com/insus/p/3590907.html 那只是把文档上传至MVC应用程序下的某一目录之中. 其 ...
- Express下使用formidable实现POST表单上传文件并保存
Express下使用formidable实现POST表单上传文件并保存 在上一篇文章中使用formidable实现了上传文件,但没将它保存下来. 一开始,我也以为是只得到了文件的相关信息,需要用fs. ...
- 巨蟒python全栈开发django11:ajax&&form表单上传文件contentType
回顾: 什么是异步? 可以开出一个线程,我发出请求,不用等待返回,可以做其他事情. 什么是同步? 同步就是,我发送出了一个请求,需要等待返回给我信息,我才可以操作其他事情. 局部刷新是什么? 通过jq ...
- 记录一次node中台转发表单上传文件到后台过程
首发掘金 记录一次node中台转发表单上传文件到后台过程 本篇跟掘金为同一个作者leung 公司几个项目都是三层架构模式即前台,中台(中间层),后台.前台微信端公众号使用vue框架,后台管理前端使 ...
- from 表单上传文件和下载?
from表单上传单个文件的方法. 分为三个部分,简单演示. 一部分 表单上传文件 <%-- Created by IntelliJ IDEA. User: Administrator Date: ...
- JsonResponse类的使用、form表单上传文件补充、CBV和FBV、HTML的模板语法之传值与过滤器
昨日内容回顾 Django请求生命周期 # 1.浏览器发起请求 到达Django的socket服务端(web服务网关接口) 01 wsgiref 02 uwsgi + nginx 03 WSGI协议 ...
- ASP.NET页面上传文件时提示文件大小超过请求解决方法
在webconfig中节点 <system.web> </system.web> 下加入以下代码:maxRequestLength为限制上传文件大小,executionTime ...
随机推荐
- HTML <frameset>不同frame之间传值
布局 左右30%--70%,点击左边的复选框,右边显示相应的反应. 代码 main2.html <html> <frameset cols="30%, 70%"& ...
- Apache-Maven 的安装及配置
一. 下载 没有 Maven 的朋友可以去 Apache 的官网下载一个 Maven, Apache-Maven 官网下载 : https://maven.apache.org/download.cg ...
- node.js之forEach
forEach用法: var array1=[1,2,3]; array1.forEach(function(item,index){ console.log(item+'---'+index); } ...
- SQL语句执行与结果集的获取
title: SQL语句执行与结果集的获取 tags: [OLEDB, 数据库编程, VC++, 数据库] date: 2018-01-28 09:22:10 categories: windows ...
- rest-framework框架——认证、权限、频率组件
一.rest-framework登录验证 1.models.py添加User和Token模型 class User(models.Model): name = models.CharField(max ...
- Swiper双向轮播
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- ADO.NET Tips
1. SqlCommand.ExecuteScalar Method Executes the query, and returns the first column of the first row ...
- wx.grid 简单例子
import wx, wx.grid class GridData(wx.grid.PyGridTableBase): _cols = "a b c".split() _data ...
- struts-config.xml 中 action 与 forward 的重要属性
1.forward 的 redirect 可以为true.false(默认).yes.no true和yes一样,false和no一样: redirect="false",容器内跳 ...
- Flask入门邮件同步与异步发送(九)
应用场景: 用户在注册或者密码丢失等过程中,账号绑定邮箱,用户在进行身份认证的过程中,电子邮箱确实是一种很常用的方式,Python中提供了smtplib可以实现发送电子邮件功能,Flask框架也有 ...