web-dev-qa-db-fra.com

Télécharger une image dans Asp.Net Core?

Je veux télécharger l'image dans le dossier "wwwroot/uploads/img" mais j'obtiens une erreur. J'ai écrit le code suivant:

Créer une vue:

@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>

Modèle :

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

Manette

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

Lorsque je clique sur le bouton d'envoi, un message d'erreur s'affiche (la ligne d'erreur est marquée), comment puis-je télécharger une image ou un fichier dans Chemin spécifié?

Erreur:

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\\");

Comment puis-je télécharger une image correctement dans le chemin spécifié?

7
saeed

Je l'ai résolu. J'ai compris que je commençais mal 

_appEnvironment

in Constructor . Avec des éditions répétées, tous les codes en question sont actuellement corrects.

Merci @Shyju utilisateur.

2
saeed

Voici comment télécharger une image dans C # Asp.net core Web Application 2.1 MVC:

Premièrement, je suppose que vous avez créé un modèle, ajouté à db et que vous travaillez maintenant dans le contrôleur. 

J'ai créé un modèle de personne modèle de personne

Pour créer obtenez:

 //Get : Person Create
        public IActionResult Create()
        {
            return View();
        }

post-action (veuillez voir la capture d'écran) créer une méthode post-action

Enfin la vue Créer une vue

Résultat du projet: Voici le résultat de mon projet

0
Jeff