想要将图像保存到文件夹并将URL保存在数据库中 [英] Want to save a image to a folder and saving the url in database

查看:137
本文介绍了想要将图像保存到文件夹并将URL保存在数据库中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在asp.net mvc中非常新手.在这里我在控制器映像上传中遇到了问题,任何人都可以提供帮助吗?我从互联网上获得的这个示例控制器,应该进行哪些更改并编写viewnya的代码,这里我想通过"AvatarUrl"保存图像

I very newbie in asp.net mvc . here I had a problem in the controller image upload anyone can give help ?? This example controller I get from the internet , what should I change and code viewnya like, here I want to save the image through " AvatarUrl "

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; }
}

控制器>员工控制器

    [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);
    }

推荐答案

上传文件,存储在本地文件系统中并保存到数据库是一种常见的模式.这些是我的建议.

Uploading a file, storing in the local file-system, and saving to a database is a common pattern. These are my recommendations.

1.请勿将上传的文件名用作文件名.

这很常见:

var filename = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Uploads/Photo/"), filename);
file.SaveAs(path);

不要这样做.有几个原因:

Don't do it. There are a few reasons:

a)文件名可能会冲突. b)远程文件名可能与您的本地文件系统不兼容. c)有人可能尝试使用恶意文件名,这样做可能会破坏您的服务器.

a) Filenames may conflict. b) Remote filenames may be incompatible with your local file-system. c) Someone may try a malicious filename and doing this may break your server.

相反,生成您自己的文件名(也许使用GUID,GUID.NewGuid().ToString())并将原始文件名存储在数据库中.

Instead, generate your own filename (perhaps using a GUID, GUID.NewGuid().ToString()) and store the original filename in your database.

2.不要将所有文件存储在单个文件夹中

有时,您的文件夹将包含太多文件,操作系统无法快速处理.

At some point, your folder will contain too many files for the OS to process quickly.

通过一些有用的东西(例如用户ID)对文件进行分区.这也有助于隔离用户之间的文件.

Partition the files by something useful, like the user ID. This also helps to segregate the files between users.

3.不要将文件的完整路径存储在数据库中

有时,您可能会将文件移动(也许移动到其他驱动器上),并且所有存储的文件位置都会损坏.

At some point, you may move the files (perhaps to a different drive) and all your stored file locations will be broken.

4.不要将图片网址存储在数据库中

与#3相同.如果您的Web应用程序发生更改,并且您想更改图像URL,则数据库中存储的URL不正确.您必须扫描并更新所有数据库记录.

Same as #3. If your web app changes and you want to change the image URLs, then you have incorrect URLs stored in the database. You'll have to scan and update all your database records.

5.不要在数据库中存储多余的路径信息

虽然可能很想在数据库的存储URL中包括上传/照片/",但它也存在许多问题:

While it may be tempting to include "Uploads/Photo/" in the stored URL in the database, it has many problems too:

a)是冗余数据.对于每个文件,您都在使用额外的不必要的数据空间. b)如果您的应用程序更改了并且URL应该更改了,那么您存储的URL现在就被破坏了.

a) It's redundant data. For every file, you're using extra, unnecessary, data space. b) If your app changes and the URL should change, your stored URLs are now broken.

相反,在您从数据库中读取值之后,在URL前面添加上传/照片/".

Instead, prepend "Uploads/Photo/" to the URL after you read the value from the database.

更新:

以下是一些示例代码:

    [HttpPost]
    public ActionResult Create(EventModel eventmodel, HttpPostedFileBase file)
    {
        if (ModelState.IsValid)
        {
            var originalFilename = Path.GetFileName(file.FileName);
            string fileId = Guid.NewGuid().ToString().Replace("-", "");
            string userId = GetUserId(); // Function to get user id based on your schema

            var path = Path.Combine(Server.MapPath("~/Uploads/Photo/"), userId, fileId);
            file.SaveAs(path);

            eventModel.ImageId = fileId;
            eventmodel.OriginalFilename = originalFilename;

            _db.EventModels.AddObject(eventmodel);
            _db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(eventmodel);
    }

但是,对于将您的数据模型用作MVC动作模型,我会保持警惕.

However, I would be wary about using your data model as the MVC action model.

这篇关于想要将图像保存到文件夹并将URL保存在数据库中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆