如何使用自定义名称上传带有原始扩展名的图片?

时间:2014-07-23 14:42:41

标签: c# asp.net-mvc asp.net-mvc-4

我正在尝试以我基本上已经完成的形式上传图像,但我希望图像专门为每个注册用户命名。

例如,每封电子邮件都是唯一的,如果数据库中已有另一封电子邮件,则该表单将返回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

我只想拉出原始文件的扩展名,然后在拉出电子邮件值后添加它。

感谢。

2 个答案:

答案 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);