使用HttpFileCollectionBase问题使用C#和MVC3上传多个文件
问题描述:
我创建了一个保存文件的控制器。使用HttpFileCollectionBase问题使用C#和MVC3上传多个文件
下面的代码是控制器的一部分:
if (Request.Files.Count != 0) {
HttpFileCollectionBase files = Request.Files;
foreach (HttpPostedFileBase file in files) {
if (file.ContentLength > 0) {
if (!file.ContentType.Equals("image/vnd.dwg")) {
return RedirectToAction("List");
}
}
}
}
在ASPX页面很简单:
<input type="file" name="file" />
<input type="file" name="file" />
...// many inputs type file
的问题是foreach
因为它返回一个错误一样(我知道,因为我跑在调试模式下并在foreach语句中放置断点):
Unable to cast object of type 'System.String' to type 'System.Web.HttpPostedFileBase'.
我的错误是什么?
答
尝试这样的:
[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
if (files != null && files.Count() > 0)
{
foreach (var uploadedFile in files)
{
if (uploadedFile.ContentType != "image/vnd.dwg")
{
return RedirectToAction("List");
}
var appData = Server.MapPath("~/app_data");
var filename = Path.Combine(appData, Path.GetFileName(uploadedFile.FileName));
uploadedFile.SaveAs(filename);
}
}
return RedirectToAction("Success");
}
和修改标记,以便该文件输入端被命名文件:
<input type="file" name="files" />
<input type="file" name="files" />
...// many inputs type file
答
for (int i = 0; i < Request.Files.Count; i++)
{
var file = Request.Files[i];
// this file's Type is HttpPostedFileBase which is in memory
}
HttpRequestBase.Files
需要一个指数,所以使用for
代替foreach
。
我尝试了上面的代码(看起来和我的代码一样),但是我改变了关于'foreach'的想法。我现在使用'for'语句。它运作良好。 – 2012-02-29 14:11:29
和最后一提:我没有参数在我的控制器功能 – 2012-02-29 14:13:58
我试过这个解决方案,但我没有检索任何值! – 2015-12-23 11:50:19