Patrick
Patrick

Reputation: 11

How to upload images to folder under wwwroot in .NET? (MVC)

I am trying to save image file to a folder under wwwroot, the database should store the path name of the file, and the folder under wwwroot should store the image file.

What I want to achieve is to save the image file to the folder under wwwroot. and the path name to the image file to be save to the local database.

Thank you!!

View:

<form asp-controller="MobileSuits" asp-action="Add">
    <div class="form-horizontal">
        <h4>TheMobileSuit</h4>
        <hr />
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="Id" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="Id" class="form-control" />
                <span asp-validation-for="Id" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group">
            <label asp-for="Name" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="Name" class="form-control" />
                <span asp-validation-for="Name" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group">
            <label asp-for="PicFile" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                  @*<input type="file" name="photo"
                               class="form-control" />*@
                <input type="file" name="file" id="file" /> 
                <span asp-validation-for="PicFile" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
</form>

Controller:

[Authorize]
        public IActionResult Add()
        {
            return View();
        }

    [Authorize]
    [HttpPost]
    public IActionResult Add(TheMobileSuit themobilesuits, IFormFile photo)
    {

        DbSet<TheMobileSuit> dbs = _dbContext.TheMobileSuit;
        dbs.Add(themobilesuits);

        if (_dbContext.SaveChanges() == 1)
            TempData["Msg"] = "New Order Added!";
        else
            TempData["Msg"] = "Error.";
        return RedirectToAction("Index");
    }

Upvotes: 0

Views: 3445

Answers (2)

Dharmeshsharma
Dharmeshsharma

Reputation: 701

Try this simple. In this you have to inject _hostingEnvironment so you can get ContentRootPath

  string folderName = "Upload/Profile/" + user.Id;
        string webRootPath = _hostingEnvironment.ContentRootPath;
        string newPath = Path.Combine(webRootPath, folderName);
        if (!Directory.Exists(newPath))
        {
            Directory.CreateDirectory(newPath);
        }
        string extention = file.ContentType.Split("/")[1];
        string fileName = user.Id + ".jpg";
        string fullPath = Path.Combine(newPath, fileName);
        string envpath = folderName + "/" + fileName;
        using (var stream = new FileStream(fullPath, FileMode.Create))
        {
            file.CopyTo(stream);
        }

Upvotes: 1

kumar&#39;s
kumar&#39;s

Reputation: 1

First step would be create folder under wwwroot if it doesn't exists

1. Directory.CreateDirectory(_hostingEnvironment.WebRootPath + "\\folderName\\");

Second step would be append your file name  to  above path like below
2.`var fullPathName = _hostingEnvironment.WebRootPath + "\\folderName\\" +             
photo.file.FileName;`

Final step would be by using FileStream you can copy the file
3.`using (FileStream stream = System.IO.File.Create(fullPathName))
{
photo.file.CopyTo(stream);
stream.Flush();
}`

Upvotes: 0

Related Questions