Upload file and validate file extension and file size MVC 5
我使用下面的代码来上传和检查文件扩展名和文件大小
更新 2
控制器
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| public ActionResult Create([Bind(Include ="anak_ID,Pubdate,kind,title,file,details,link")] HttpPostedFileBase file, announcement announcement)
{
if (ModelState.IsValid)
{
db.announcement.Add(announcement);
db.SaveChanges();
TempData["notice"] ="Data saved";
var allowedExtensions = new[] {".pdf",".zip",".rar" };
if (file!= null && file.ContentLength > 0)
{
var checkextension = Path.GetExtension(file.FileName).ToLower();
if (itm.Contains(checkextension))
{
var extension = Path.GetExtension(file.FileName);
var path = Path.Combine(Server.MapPath("~/Content/AnnFiles/" +"announcement_" + announcement.anak_ID + extension));
//save File
file.SaveAs(path);
//prepere announcement
announcement.file= @"announcement_" + announcement.anak_ID + extension;
//Code for Save data to announcement.
db.SaveChanges();
TempData["notice"] ="OK! the file is uploaded";
}
else
{
TempData["notice"] ="Select pdf or zip or rar less than 20??";
}
}
return RedirectToAction("Create", announcement);
}
return View(announcement);
} |
创建查看文件字段。
1 2 3
| @Html.LabelFor(model => model.file, htmlAttributes: new { @class ="control-label col-md-2" })
@Html.EditorFor(model => model.file, new { htmlAttributes = new { @class ="input-file", type ="file", name ="file"} }) |
创建视图(我显示消息的部分)。
1 2 3 4 5 6 7
| @if (TempData["notice"] != null)
{
@TempData["notice"]
} |
它将记录保存在数据库中,但在文件字段中保存"System.Web.HttpPostedFileWrapper"
当我从
更改if语句时问题就开始了
1
| if (file != null && file .ContentLength > 0) |
到
1
| if (file != null && file .ContentLength > 0 && allowedExtensions.Contains(Path.GetExtension(file .FileName).ToLower()) && file .ContentLength <= (20 * 1024)) |
so 检查文件扩展名和文件大小。
另一个问题是它总是显示消息
"选择 pdf 或 zip 或 rar 小于 20??"并保存记录。我问因为 System.Web.HttpPostedFileWrapper 值。我想要实现的是,当我选择不允许的扩展名和表中的文件名时,不保存记录。
提前致谢
- 你有创建的方法吗?
-
是的,我有很简单的 public ActionResult Create() { webdata db = new webdata(); ViewBag.kind = new SelectList(db.announcementCategories,"kind","an_kindtext"); return View(); }
-
只需使用 ||代替
-
看看这些代码。
添加了 .png 用于测试,您可以将其删除。
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 30 31 32 33 34 35 36 37 38 39 40
| var allowedExtensions = new[] {".pdf",".zip",".rar" };
var checkextension = Path.GetExtension(file.FileName).ToLower();
if (!allowedExtensions.Contains(checkextension))
{
TempData["notice"] ="Select pdf or zip or rar less than 20??";
}
foreach (var itm in allowedExtensions)
{
if (itm.Contains(checkextension))
{
db.announcement.Add(announcement);
dbo.SaveChanges();
}
}
if (file != null && file.ContentLength > 0)
{
foreach (var itm in allowedExtensions)
{
if (itm.Contains(checkextension))
{
var extension = Path.GetExtension(file.FileName);
var path = Path.Combine(Server.MapPath("~/Content/AnnFiles/" +"announcement_" + announcement.anak_ID + extension));
//save File
file.SaveAs(path);
//prepere announcement
announcement.file = @"announcement_" + announcement.anak_ID + extension;
//Code for Save data to announcement.
db.SaveChanges();
TempData["notice"] ="OK! the file is uploaded";
}
}
} |
-
看看这些代码。
添加了 .png 用于测试,您可以将其删除。
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 30 31 32 33 34 35 36 37 38 39 40
| var allowedExtensions = new[] {".pdf",".zip",".rar" };
var checkextension = Path.GetExtension(file.FileName).ToLower();
if (!allowedExtensions.Contains(checkextension))
{
TempData["notice"] ="Select pdf or zip or rar less than 20??";
}
foreach (var itm in allowedExtensions)
{
if (itm.Contains(checkextension))
{
db.announcement.Add(announcement);
dbo.SaveChanges();
}
}
if (file != null && file.ContentLength > 0)
{
foreach (var itm in allowedExtensions)
{
if (itm.Contains(checkextension))
{
var extension = Path.GetExtension(file.FileName);
var path = Path.Combine(Server.MapPath("~/Content/AnnFiles/" +"announcement_" + announcement.anak_ID + extension));
//save File
file.SaveAs(path);
//prepere announcement
announcement.file = @"announcement_" + announcement.anak_ID + extension;
//Code for Save data to announcement.
db.SaveChanges();
TempData["notice"] ="OK! the file is uploaded";
}
}
} |
-
看看这些代码。
添加了 .png 用于测试,您可以将其删除。
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 30 31 32 33 34 35 36 37 38 39 40
| var allowedExtensions = new[] {".pdf",".zip",".rar" };
var checkextension = Path.GetExtension(file.FileName).ToLower();
if (!allowedExtensions.Contains(checkextension))
{
TempData["notice"] ="Select pdf or zip or rar less than 20??";
}
foreach (var itm in allowedExtensions)
{
if (itm.Contains(checkextension))
{
db.announcement.Add(announcement);
dbo.SaveChanges();
}
}
if (file != null && file.ContentLength > 0)
{
foreach (var itm in allowedExtensions)
{
if (itm.Contains(checkextension))
{
var extension = Path.GetExtension(file.FileName);
var path = Path.Combine(Server.MapPath("~/Content/AnnFiles/" +"announcement_" + announcement.anak_ID + extension));
//save File
file.SaveAs(path);
//prepere announcement
announcement.file = @"announcement_" + announcement.anak_ID + extension;
//Code for Save data to announcement.
db.SaveChanges();
TempData["notice"] ="OK! the file is uploaded";
}
}
} |
-
看看这些代码。
添加了 .png 用于测试,您可以将其删除。
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 30 31 32 33 34 35 36 37 38 39 40
| var allowedExtensions = new[] {".pdf",".zip",".rar" };
var checkextension = Path.GetExtension(file.FileName).ToLower();
if (!allowedExtensions.Contains(checkextension))
{
TempData["notice"] ="Select pdf or zip or rar less than 20??";
}
foreach (var itm in allowedExtensions)
{
if (itm.Contains(checkextension))
{
db.announcement.Add(announcement);
dbo.SaveChanges();
}
}
if (file != null && file.ContentLength > 0)
{
foreach (var itm in allowedExtensions)
{
if (itm.Contains(checkextension))
{
var extension = Path.GetExtension(file.FileName);
var path = Path.Combine(Server.MapPath("~/Content/AnnFiles/" +"announcement_" + announcement.anak_ID + extension));
//save File
file.SaveAs(path);
//prepere announcement
announcement.file = @"announcement_" + announcement.anak_ID + extension;
//Code for Save data to announcement.
db.SaveChanges();
TempData["notice"] ="OK! the file is uploaded";
}
}
} |
看看这些代码。
添加了 .png 用于测试,您可以将其删除。
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 30 31 32 33 34 35 36 37 38 39 40
| var allowedExtensions = new[] {".pdf",".zip",".rar" };
var checkextension = Path.GetExtension(file.FileName).ToLower();
if (!allowedExtensions.Contains(checkextension))
{
TempData["notice"] ="Select pdf or zip or rar less than 20??";
}
foreach (var itm in allowedExtensions)
{
if (itm.Contains(checkextension))
{
db.announcement.Add(announcement);
dbo.SaveChanges();
}
}
if (file != null && file.ContentLength > 0)
{
foreach (var itm in allowedExtensions)
{
if (itm.Contains(checkextension))
{
var extension = Path.GetExtension(file.FileName);
var path = Path.Combine(Server.MapPath("~/Content/AnnFiles/" +"announcement_" + announcement.anak_ID + extension));
//save File
file.SaveAs(path);
//prepere announcement
announcement.file = @"announcement_" + announcement.anak_ID + extension;
//Code for Save data to announcement.
db.SaveChanges();
TempData["notice"] ="OK! the file is uploaded";
}
}
} |
- 感谢您的回复,现在 1) 当我不选择文件时,它会保存正确的记录,但会显示消息"选择 pdf 或 zip..." 2) 当我选择其他扩展名时,可以说 .jpg 它会保存记录, 并将 "System.Web.HttpPostedFileWrapper" 放在文件字段中并且没有消息 3) 当我选择适当的扩展文件时,它会存储记录。
-
可以吗?或者你还需要什么?如果没有,那么请支持我的回答,它真的对我有帮助......
-
好吧,这不行,因为当我再次选择其他扩展名时,请保存记录。我不需要保存记录并显示错误消息,如"选择 pdf 或 zip 或 rar 小于 20??"。此外,当没有选择文件时,我不需要显示错误消息。它不是必填字段。非常感谢你
-
你好,我们又见面了。现在,当我不选择文件时,它根本不保存记录。我需要保存记录,在这种情况下。文件字段不是必填字段。当我选择 pdf 或其他适当的扩展名时,它会显示消息 "Select pdf ...." 并以 "announcement_0" 格式保存文件。这就是为什么我有两次 db.SaveChanges 的原因,因为我需要文件名的 ID (anak_id)。当我选择其他扩展名时,它根本不保存记录并显示正确的消息。谢谢
-
嘿 touinta,我给了你完整的例子,你只需要改变 if-else。我的朋友..目前我正在开会。
-
是的,我知道,但我的结果几乎相同。我不想打扰你开会。我会试一试……谢谢。
-
您好,我设法解决了大部分问题。现在唯一错误的是,当文件不是适当的扩展名时,我不需要保存记录。它显示消息,但由于模型有效,它也会保存记录。任何的想法?
-
让我们在聊天中继续这个讨论。