這是我在其中上傳或添加圖片的控制器
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("MemberId,Name,Gender,DOB,MaritalStatus,Address,PhoneNo,Skills,Hobbies,JobTitle,Technology")] Member member)
{
if (ModelState.IsValid)
{
if(member.ImageName != null)
{
string folder = "ImageName/Cover";
folder = member.ImageName.FileName Guid.NewGuid().ToString();
string serverFolder =Path.Combine(_webHostEnviroment.WebRootPath, folder);
}
_context.Add(member);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(member);
}
這是模型類:
public class Member
{
public int MemberId { get; set; }
[StringLength(60, MinimumLength = 3)]
public string? Name { get; set; }
public string? Gender { get; set; }
public DateTime DOB { get; set; }
public string? MaritalStatus { get; set; }
public string? Address { get; set; }
public long PhoneNo { get; set; }
public string? Skills { get; set; }
public string? Hobbies { get; set; }
public string? JobTitle { get; set; }
public string? Technology { get; set; }
public string? ImageName { get; set; }
public Team? Team { get; set; }
public ICollection<TeamMember>? TeamMembers { get; set; }
public ICollection<ProjectMember>? ProjectMembers { get; set; }
}
這是我的html頁面
<div >
<div >
<label >Member Image</label>
<div >
<input type="file" name="pic" accept="image/*" />
</div>
</div>
</div>
如何在我在控制器中添加功能但顯示錯誤時上傳圖片;我會第一次嘗試這件事,但我不知道如何解決這個錯誤 - 我嘗試但什么都不會發生。
圖片/封面檔案夾

uj5u.com熱心網友回復:
"How to upload a picture in I add functionality in controller but it shows an error; I will try this thing first time and I don't not how to fix this error - I try but nothing will happen?"
首先,您應該使用
IFormFile photo屬性來處理您的image upload選擇。所以在你當前的設計中,你什么時候添加IFormFile屬性它會對你大喊大叫,OnModelCreating所以你應該viewModel在這里輕松處理。這是為您準備的完整演示。
Your Current Model
public class Member
{
[Key]
public int MemberId { get; set; }
[StringLength(60, MinimumLength = 3)]
public string? Name { get; set; }
public string? Gender { get; set; }
public DateTime DOB { get; set; }
public string? ImageName { get; set; }
}
Make a ViewModel Like This
public class MemberViewModel
{
public Member Member { get; set; }
public IFormFile? Photo { get; set; }
}
Note:原因MemberViewModel是當您IFormFile在現有模型中添加屬性時,它會限制您,并且需要克服額外的麻煩,而不是ViewMdoel讓您輕松。
Controller
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateMember(MemberViewModel model, IFormFile photo)
{
if (photo == null || photo.Length == 0)
{
return Content("File not selected");
}
var path = Path.Combine(_environment.WebRootPath, "ImageName/Cover", photo.FileName);
using (FileStream stream = new FileStream(path, FileMode.Create))
{
await photo.CopyToAsync(stream);
stream.Close();
}
model.Member.ImageName = photo.FileName;
if (model != null)
{
var member = new Member
{
Name = model.Member.Name,
Gender = model.Member.Gender,
DOB = model.Member.DOB,
ImageName = model.Member.ImageName,
ImageLocation = path,
};
_context.Add(member);
await _context.SaveChangesAsync();
}
return RedirectToAction("MemberList");
}
Note:請記住,首先我們將影像保存在其中,folder然后我們將其保存image name并location保存到database我們擁有viewModel的與我們不同的位置,domain model因此我們系結view model到我們的domain model
View
@model DotNet6MVCWebApp.Models.MemberViewModel
<div>
<form asp-action="CreateMember" method="post" enctype="multipart/form-data">
<div asp-validation-summary="ModelOnly"></div><input type="hidden" asp-for="Member.MemberId" />
<div>
<h4><strong>Member Details</strong> </h4>
<table class="table table-sm table-bordered table-striped">
<tr>
<th> <label asp-for="Member.Name"></label></th>
<td> <input asp-for="Member.Name" class="form-control" placeholder="Enter member name" /><span asp-validation-for="Member.Name"></span></td>
</tr>
<tr>
<th> <label asp-for="Member.Gender"></label></th>
<td>
<select asp-for="Member.Gender" class="form-control">
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
<span asp-validation-for="Member.Gender"></span>
</td>
</tr>
<tr>
<th> <label asp-for="Member.DOB"></label></th>
<td> <input asp-for="Member.DOB" class="form-control" placeholder="Enter animal category" /><span asp-validation-for="Member.DOB"></span></td>
</tr>
<tr>
<th> <label asp-for="Photo"></label></th>
<td>
<strong>Upload New File</strong> <div id="chooseFile"><input type="file" name="photo" accept="image/*" /></div>
</td>
</tr>
<tr>
<th> <button type="submit" class="btn btn-primary" style="width:107px">Save Info</button></th>
<td> </td>
</tr>
<tr>
<th>@Html.ActionLink("Back To List", "MemberList", new { /* id=item.PrimaryKey */ }, new { @class = "btn btn-success" })</th>
<td> </td>
</tr>
</table>
</div>
</form>
</div>
Output

希望它會相應地指導你。
uj5u.com熱心網友回復:
首先,您應該將 IFormFile 用于您的影像屬性,例如;
我沒有將任何 IFormFile 屬性添加到我添加到我的 DbContext 的類中,我通過在 ViewModel 中使用它來處理它,并且我在添加頁面上使用該 ViewModel 作為模型,這是我猜的重點......

我將檔案路徑保存在 AppSettings.json 中,以便從那里獲取它們
這是我如何將影像上傳到該檔案路徑的代碼...

這是添加頁面視圖;(如果您只上傳一張圖片,則不必使用 'multiple' 屬性,如果您愿意,則必須將影像屬性從 IFormFile 更改為 IFormFile[] )

我希望這些幫助!:)
uj5u.com熱心網友回復:
您需要添加一個屬性
public IformFile pic{get;set;}
在你的會員班
并洗掉您操作中的系結屬性,以便您可以系結您的成員模型
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/483888.html
