在Asp.Net Core中上传图片?

13

我想把图片上传到"wwwroot/uploads/img"文件夹,但是我遇到了错误。我写了以下代码:

创建视图:

@model imageuploader.Models.Employee

<form method="post" enctype="multipart/form-data" asp-controller="Employee" asp-action="Create">

<div class="form-group">
    <div class="col-md-10">
        <input asp-for="FirstName" class="form-control" />
    </div>
</div>

<div class="form-group">
    <div class="col-md-10">
        <input asp-for="LastName" Class="form-control" />
    </div>
</div>

<div class="form-group">
    <div class="col-md-10">
        <input asp-for="ImageName" type="file" Class="form-control" />
    </div>
</div>

<div class="form-group">
    <div class="col-md-10">
        <input type="submit" value="Create" />
    </div>
</div>

模型:

public class Employee
{
    [Key]
    public int ID { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    public string ImageName { get; set; }
}

控制器

    private readonly RegisterDBContext _context;
    private readonly IHostingEnvironment _appEnvironment;


    public EmployeeController(RegisterDBContext context, IHostingEnvironment appEnvironment)
    {

        _context = context;
        _appEnvironment = appEnvironment;
    }


    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create(Employee emp)
    {
        if (ModelState.IsValid)
        {
            var files = HttpContext.Request.Form.Files;
            foreach (var Image in files)
            {
                if (Image != null && Image.Length > 0)
                {
                    var file = Image;
                    //There is an error here
                    var uploads = Path.Combine(_appEnvironment.WebRootPath, "uploads\\img");
                    if (file.Length > 0)
                    {
                        var fileName = Guid.NewGuid().ToString().Replace("-", "") + Path.GetExtension(file.FileName);
                        using (var fileStream = new FileStream(Path.Combine(uploads, fileName), FileMode.Create))
                        {
                            await file.CopyToAsync(fileStream);
                            emp.BookPic = fileName;
                        }

                    }
                }
            }
            _context.Add(emp);
            await _context.SaveChangesAsync();
            return RedirectToAction("Index");
        }
        else
        {
            var errors = ModelState.Values.SelectMany(v => v.Errors);
        }
        return View(emp);
    }

当我点击提交按钮时,会收到一个错误(错误行已标记),如何将图像或文件上传到指定路径?

错误:

NullReferenceException: Object reference not set to an instance of an object.

imageuploader.Controllers.EmployeeController+<Create>d__2.MoveNext() in EmployeeController.cs

                        var uploads = Path.Combine(_appEnvironmen.WebRootPath, "uploads\\img\\");

如何在指定路径正确上传图片?


1
你在哪里初始化 _appEnvironment?它是 NULL 吗? - Shyju
在你的代码中设置一个断点,找出什么是“NULL”。 - Shyju
@Shyju 噢,抱歉,因为这只是一个示例问题,不是我的真实项目。我已经编辑过了。 - topcool
你的异常显示代码在HomeController中崩溃。但是你说你正在向EmployeeController发布。如果你的控制器有构造函数来初始化从注入的IHostingEnvironment实现中的_appEnvironment变量,它将不会是NULL - Shyju
你可以自己回答 - Shyju
显示剩余5条评论
2个回答

4

我解决了它。我最初理解得不好。

_appEnvironment

在构造函数中。经过反复编辑,所有相关代码现在都是正确的。

感谢@Shyju用户。


1
以下是如何在C# Asp.net core Web Application 2.1 MVC中上传图像的方法:
首先,我假设您已经创建了一个模型,将其添加到数据库并正在控制器中工作。
我已经创建了一个人员模型 person model 对于创建获取:
 //Get : Person Create
        public IActionResult Create()
        {
            return View();
        }

发布动作(请参见屏幕截图) 创建发布动作方法

最后是视图 创建视图

项目输出: 这是我的项目输出


4
不要害怕在此处发布较长的代码文本,将其制作成图像会使复制/编辑变得更加困难。 - loa_in_
1
最好在 Stack Overflow 上托管图片,而不是第三方服务(确保它们将保持可用)。 - user3071284

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接