我正在尝试以我基本上已经完成的形式上传图像,但我希望图像专门为每个注册用户命名。
例如,每封电子邮件都是唯一的,如果数据库中已有另一封电子邮件,则该表单将返回false(不会让他/她注册)。
所以我所做的就是将文件名更改为他/她在表单中输入的电子邮件。
但现在该文件没有原始扩展名(.jpg .png等)。
有没有办法拉动文件原始扩展名?
这是我在控制器中的内容:
[HttpPost]
public AcitonResult Register(Registration signingUp, HttpPostedFileBase avatar)
{
var db = new AvatarDBEntities();
if (ModelState.IsValid)
{
var FindEmail = db.tblProfiles.FirstOrDefault(e => e.PROF_Email == signingUp.Email);
if (FindEmail == null)
{
var Data = db.tblProfiles.Create();
Data.PROF_Email = signingUp.Email;
if (avatar != null)
{
string profpic = System.IO.Path.GetFileName(avatar.FileName);
string profpic_name = signingUp.Email + ".jpg"; //this is what I'm trying to change
string path = System.IO.Path.Combine(Server.MapPath("~/assets/images/user_images/avatars"), profpic_name);
avatar.SaveAs(path);
}
db.tblProfiles.Add(Data);
db.SaveChanges();
}
else
{
ModelState.AddModelError("Email", "That Email already exist.");
return View();
}
}
return View();
}
查看:
@using (Html.BeginForm("Register", "Main", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.TextBoxFor(r => r.Email, new { @class = "custom-input Email" })<br/>
@Html.ValidationMessageFor(a => a.Email)<br/>
<label for="avatar">Profile picture:<span class="required">*</span></label><br />
<input type="file" name="avatar" id="avatar" /><br/>
<input type="submit" />
}
图片位于文件夹中,其名称为电子邮件,扩展名为.jpg
。
我只想拉出原始文件的扩展名,然后在拉出电子邮件值后添加它。
感谢。
答案 0 :(得分:3)
我认为您正在寻找的是
Path.GetExtension(string fileName)
所以你的代码变成了
string profpic_name = signingUp.Email + Path.GetExtension(avatar.FileName);
答案 1 :(得分:0)
有一种名为Path.GetExtension
首先将扩展名存储在临时变量中,然后再使用它。
string tempExtension = Path.GetExtension(avatar.FileName);