我正在尝试使用ASP.NET MVC上传文件。
以下代码完美无缺:
// Read in the image data.
byte[] binaryData = null;
HttpPostedFileBase uploadedFile = Request.Files["ImageFileName"];
if (uploadedFile != null &&
uploadedFile.ContentLength > 0)
{
binaryData = new byte[uploadedFile.ContentLength];
uploadedFile.InputStream.Read(binaryData,
0,
uploadedFile.ContentLength);
}
但我要做的是使用期货程序集中的新FileCollectionModelBinder
。
我发现这两篇博文here和here解释了该怎么做。我遵循这些说明,但没有任何运气 - > file
对象始终为null
。
这是我的方法。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Include = "Subject, Content")]
Post post,
HttpPostedFileBase file)
{
UpdateModel(post);
...
}
注意我是如何上传文件并将一些帖子信息上传到Post对象的。
有人可以提出任何建议吗?
为了记录,我在global.asax.cs中连接了ModelBinder。我还确保该表单是添加了enctype的帖子: -
<form method="post" enctype="multipart/form-data" action="/post/create">
答案 0 :(得分:10)
没有血腥的方式:(
我想出了答案而且非常蹩脚。
我必须让参数 NAME 与输入type =“file”元素的Id / Name值相同! (不确定它是否是元素值中的任何一个或两个......我没有检查出来)。
所以这就是答案。
<input type="file" id="imageFileName" name="imageFileName" class="upload" />
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Include = "Subject, Content")]Post post,
HttpPostedFileBase imageFileName)
{
...
}
shees!
答案 1 :(得分:5)
请记住,您还需要打开这样的表单:
<form enctype="multipart/form-data" ...
答案 2 :(得分:1)
不确定这是否与问题相关,但我刚刚找到了一种方法来获取HttpPostedFileBase在复杂对象中的模型绑定。不幸的是,我不得不对ASP.NET MVC源代码进行更改,因此不适合所有人。
在System.Web.Mvc.ValueProviderDictionary.PopulateDictionary()中,值提供程序正在填充Request.Form,Request.QueryString和RouteData的内容 - 但不是Request.Files。添加以下行来“修复”这个(我说“修复”,因为ASP.NET MVC团队可能首先没有这样做)。
HttpFileCollectionBase files = ControllerContext.HttpContext.Request.Files;
if (files != null)
{
string[] keys = files.AllKeys;
foreach (string key in keys)
{
HttpPostedFileBase file = files[key];
ValueProviderResult result = new ValueProviderResult(file, file.FileName, currentCulture);
AddToDictionaryIfNotPresent(key, result);
}
}
答案 3 :(得分:0)
在过去的一周里,我一直在为我的MVC项目构建一个上传/文件管理器系统,我最初的尝试是发布带有多部分文件值的其他帖子数据。这对我的时间限制来说太难了。我现在的方法是创建文件/图像可以“附加”的“相应记录”(就像我的情况一样),然后在记录存在后上传('附加')文件/图像。< / p>
例如:1)创建事件记录,2)附加上传控件的图像
我收到多部分帖子的操作使用Hanselman's post中的概念。
我不能说我已经尝试过对文件的内置复杂类型绑定(HttpPostedFileBase)但是我建议它比我现在的解决方案更复杂,因为阅读Hanselman上面写的帖子 - 我'我们了解到Request
中返回的文件集只是一个松散类型的集合。
我建议您坚持使用原始代码并尝试为您的目的更加安全。