我很新手在asp.netmvc .这里我有一个问题,在控制器的图像上传任何人都可以给予帮助??这个例子控制器我从互联网上得到的,我应该改变什么和代码viewnya喜欢,这里我想通过保存图像“AvatarUrl“
Model〉EmployeeServices
public class EmployeeModel{
[ScaffoldColumn(false)]
public int EmployeeID { get; set; }
[Required(ErrorMessage = "Please Enter Position ID")]
public int PositionID { get; set; }
[Required(ErrorMessage = "Please Enter NO PEK")]
public string NoPEK { get; set; }
[Required(ErrorMessage = "Please Enter NO KTP")]
public string NoKTP { get; set; }
[Required(ErrorMessage = "Please Enter TaxID")]
public string TaxID { get; set; }
[Required(ErrorMessage = "Please Enter FirstName")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Please Enter LastName")]
public string LastName { get; set; }
[Required(ErrorMessage = "Please Enter OrganizationID")]
public int OrganizationID { get; set; }
[Required(ErrorMessage = "Please Enter BirthPlace")]
public string BirthPlace { get; set; }
[Required(ErrorMessage = "Please Enter BirthDay")]
public System.DateTime BirthDay { get; set; }
[Required(ErrorMessage = "Please Enter Gender")]
public string Gender { get; set; }
[Required(ErrorMessage = "Please Enter Religion")]
public string Religion { get; set; }
[Required(ErrorMessage = "Please Enter TaxAddress")]
public string TaxAddress { get; set; }
[Required(ErrorMessage = "Please Enter Home Address")]
public string HomeAddress { get; set; }
[Required(ErrorMessage = "Please Enter Current Address")]
public string CurrentAddress { get; set; }
[Required(ErrorMessage = "Please Enter Phone Number")]
public string PhoneNumber { get; set; }
[Required(ErrorMessage = "Please Enter Email")]
public string Email { get; set; }
[Required(ErrorMessage = "Please Enter IsAuditor")]
public string IsAuditor { get; set; }
[Required(ErrorMessage = "Please Enter TaxProvince ")]
public int TaxProvinceID { get; set; }
[Required(ErrorMessage = "Please Enter Tax City ")]
public int TaxCityID { get; set; }
[Required(ErrorMessage = "Please Enter Home Province ")]
public int HomeProvinceID { get; set; }
[Required(ErrorMessage = "Please Enter Home City")]
public int HomeCityID { get; set; }
[Required(ErrorMessage = "Please Enter Current Province")]
public int CurrentProvinceID { get; set; }
[Required(ErrorMessage = "Please Enter Current City")]
public int CurrentCityID { get; set; }
[Required(ErrorMessage = "Please Enter Avatar Url")]
public string AvatarUrl { get; set; }
}
Controller〉EmployeesController
[HttpPost]
public ActionResult Create(EventModel eventmodel, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
var filename = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Uploads/Photo/"), filename);
file.SaveAs(path);
tyre.Url = filename;
_db.EventModels.AddObject(eventmodel);
_db.SaveChanges();
return RedirectToAction("Index");
}
return View(eventmodel);
}
3条答案
按热度按时间dzjeubhm1#
上传一个文件,存储在本地文件系统中,然后保存到数据库是一个常见的模式。
1.请勿使用上传文件名作为文件名。
这是常见的:
不要这样做。有几个原因:
a)文件名可能冲突。B)远程文件名可能与您的本地文件系统不兼容。c)有人可能尝试恶意文件名,这样做可能会破坏您的服务器。
相反,生成您自己的文件名(可能使用GUID
GUID.NewGuid().ToString()
)并将原始文件名存储在数据库中。2.不要将所有文件存放在一个文件夹中
在某些时候,您的文件夹将包含太多的文件,操作系统无法快速处理。
使用一些有用的东西来划分文件,比如用户ID。这也有助于在用户之间隔离文件。
3.数据库中不保存文件的完整路径
在某个时候,您可能会移动文件(可能到不同的驱动器),所有存储的文件位置都会损坏。
4.不将图片URL保存在数据库中
与#3相同。如果您的Web应用发生更改,并且您想要更改图像URL,则数据库中存储的URL不正确。您必须扫描并更新所有数据库记录。
5.数据库中不存储冗余路径信息
虽然在数据库中存储的URL中包含“Uploads/Photo/”可能很诱人,但它也有许多问题:
a)这是冗余数据。对于每个文件,您都在使用额外的、不必要的数据空间。B)如果您的应用发生更改,并且URL应该发生更改,则您存储的URL现在已损坏。
相反,在从数据库读取值后,将“Uploads/Photo/”前置到URL。
更新日期:
下面是一些示例代码:
但是,我会谨慎地使用你的数据模型作为MVC动作模型。
anhgbhbe2#
您应该将您的头像URL更改为:
在你的视图中,你可以创建一个类似于下面的表单。添加你将接受输入的字段,并为你的化身使用一个文件输入。当表单被回发到控制器时,MVC将尝试将输入绑定到参数。
控制器方法应更新为:
如果你仍然坚持让我知道,我可以进入更多的细节。
还有一个很好的/详细的写了你想做什么在这里http://cpratt.co/file-uploads-in-asp-net-mvc-with-view-models/
a2mppw5e3#
如果您使用.NET 6,您可以执行以下操作:
在模型中-
在ViewModel中-
在cshtml文件(用户输入表单)中-
在控制器/服务中-
然后从cshtml文件中访问图像,如下所示-