在ASP.net MVC 3 C#中保存HTML表单中的图像
本文关键字:保存 HTML 图像 表单 ASP net MVC | 更新日期: 2023-09-27 18:30:06
我希望有人能修改下面的代码,向我展示如何让它做我想做的事情。
我有一个HTML表单,它发布到以下操作:
public ActionResult Create(string EntryTitle, string EntryVideo, HttpPostedFileBase ImageFile, string EntryDesc)
{
if (Session["User"] != null)
{
User currentUser = (User)Session["User"];
string savedFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Path.GetFileName(ImageFile.FileName));
ImageFile.SaveAs(savedFileName);
Entry newEntry = new Entry();
newEntry.Title = EntryTitle;
newEntry.EmbedURL = EntryVideo;
newEntry.Description = EntryDesc;
newEntry.ImagePath = savedFileName;
newEntry.UserId = currentUser.UserId;
db.Entries.Add(newEntry);
db.SaveChanges();
}
return RedirectToAction("MyPage", "User");
}
这会将映像保存到根解决方案目录(或者尝试保存,但没有权限,而是抛出异常)。
我想让它做以下事情:
1.)验证文件大小是否低于某个最大值,假设现在是500kb
2.)假设文件大小可以,将其保存到以下目录
mywebsite.com/uploads/<userid>/<entryid>/entry-image.<jpg/png/gif>
我不确定如何重命名文件,因为我想接受不同的文件扩展名(.jpeg、.jpg、.png、.gif)。或者不确定如何将其放入如上所述的正确目录。或者如何验证文件大小,因为显然只有当用户使用IE.
1.验证文件大小是否在某个最大值以下,假设现在是500kb
您可以使用HttpPostFileBase.ContentLength属性来获取文件的大小(以字节为单位)。
if (ImageFile.ContentLength > 1024 * 500) // 1024 bytes * 500 == 500kb
{
// The file is too big.
}
2.假设文件大小可以,将其保存到以下目录
string savedFileName = Server.MapPath(string.Format("~/uploads/{0}/{1}/entry-image{2}",
currentUser.UserId,
newEntry.EntryId,
Path.GetExtension(ImageFile.FileName)));
我看到的唯一问题是,它看起来像是你的Entry.EntryId可能是在数据库中生成的,所以在生成它之前,你不能将它用作保存路径的一部分。
希望这有助于或至少为您指明正确的方向
if (ImageFile.ContentLength < 1024 * 500)
{
Entry newEntry = new Entry();
newEntry.Title = EntryTitle;
newEntry.EmbedURL = EntryVideo;
newEntry.Description = EntryDesc;
newEntry.UserId = currentUser.UserId;
db.Entries.Add(newEntry);
db.SaveChanges(); //this helps generate an entry id
string uploadsDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "uploads");
string userDir = Path.Combine(uploadsDir, <userid>);
string entryDir = Path.Combine(userDir, newEntry.EntryID );
if (Directory.Exists(userDir) == false)
Directory.CreateDirectory(userDir);
if (Directory.Exists(entryDir) == false)
Directory.CreateDirectory(entryDir);
string savedFileName = Path.Combine(entryDir, <entry-image>);
ImageFile.SaveAs(savedFileName);
newEntry.ImagePath = savedFileName; //if this doesn't work pull back out this entry and adjust the ImagePath
db.SaveChanges();
}
您应该授予"uploads"目录的写入权限。
您还可以从web.config 限制web应用程序的文件大小
<system.web>
<httpRuntime maxRequestLength="500"/>