Reputation: 11
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
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
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