如何上传自定义名称的图像与它的原始扩展

本文关键字:图像 原始 扩展 自定义 | 更新日期: 2023-09-27 18:14:29

我试图上传图像的形式,我基本上已经做了,但我希望图像被命名为专门为每个用户注册。

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

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

谢谢。

如何上传自定义名称的图像与它的原始扩展

我想你要找的是

Path.GetExtension(string fileName)
所以你的代码变成了
string profpic_name = signingUp.Email + Path.GetExtension(avatar.FileName);

有一个方法叫做Path.GetExtension

先将扩展名存储在一个临时变量中,然后再使用它。

string tempExtension = Path.GetExtension(avatar.FileName);