「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\\");
指定したパスに画像を正しくアップロードするにはどうすればよいですか?
解決しました。私は最初の悪いことがわかった
_appEnvironment
コンストラクターで。編集を繰り返すと、問題のコードはすべて現在正しいです。
@Shyjuユーザーに感謝します。
C#Asp.netコアWebアプリケーション2.1 MVCで画像をアップロードする方法は次のとおりです。
まず、モデルを作成し、dbに追加して、コントローラーで作業していることを前提としています。
個人モデルを作成しました 個人モデル
Create getの場合:
//Get : Person Create
public IActionResult Create()
{
return View();
}
postアクション(スクリーンショットをご覧ください) postアクションメソッドの作成
最後にビュー ビューの作成
プロジェクトの出力: これが私のプロジェクトの出力です