C# 如何在razor页面中显示文件夹中上传的图像
我有一个文件夹,其中存储具有指定前缀的不同类型的附件。 例如,图像附件将具有“IM-”前缀,文档附件将具有“DOC”前缀。 我需要的是我想显示的图像附件只在查看页面。 如何在OnGet方法中获取ImageFileName。这是我的密码 Biodata.cshtml.csC# 如何在razor页面中显示文件夹中上传的图像,c#,asp.net-core,file-upload,razor-pages,C#,Asp.net Core,File Upload,Razor Pages,我有一个文件夹,其中存储具有指定前缀的不同类型的附件。 例如,图像附件将具有“IM-”前缀,文档附件将具有“DOC”前缀。 我需要的是我想显示的图像附件只在查看页面。 如何在OnGet方法中获取ImageFileName。这是我的密码 Biodata.cshtml.cs //--------------------Image Upload ---------------// [BindProperty] public IFormFile StaffPhoto { get; set
//--------------------Image Upload ---------------//
[BindProperty]
public IFormFile StaffPhoto { get; set; }
public string ImageName { get; set; }
public async Task OnGetAsync(int? StaffID)
{
StaffGender = new SelectList(_context.Gender, "StaffGender", "StaffGender");
StaffReligion = new SelectList(_context.Religion, "StaffReligion", "StaffReligion");
StaffBioData = await _context.StaffBioData.FirstOrDefaultAsync(m => m.StaffID == StaffID);
DirectoryInfo di = new DirectoryInfo(Path.Combine(_env.WebRootPath, "Documents/OnBoardingAttachments", StaffBioData.EmpID.ToString()));
}
public async Task<IActionResult> OnPostUpdateBioDataAsync(StaffBioData StaffBioData)
{
StaffGender = new SelectList(_context.Gender, "StaffGender", "StaffGender");
StaffReligion = new SelectList(_context.Religion, "StaffReligion", "StaffReligion");
if (!ModelState.IsValid)
{
return Page();
}
else
{
var biodata = from u in _context.StaffBioData select u;
biodata = biodata.Where(s => s.StaffID.Equals(StaffBioData.StaffID));
StaffIDExists = biodata.AsNoTracking().FirstOrDefault();
_context.Entry(StaffBioData).State = StaffIDExists == null?
EntityState.Added :
EntityState.Modified;
await _context.SaveChangesAsync();
var filesave = Path.Combine(_env.WebRootPath, "Documents/OnBoardingAttachments", StaffBioData.EmpID, "IM-" + StaffBioData.EmpID + StaffPhoto.FileName);
using (var stream = System.IO.File.Create(filesave))
{
await StaffPhoto.CopyToAsync(stream);
//TempData["Success"] = "Success";
ImageName = "IM-" + StaffBioData.EmpID + StaffPhoto.FileName;
}
return new OkResult();
}
}
/--------------图像上传---------------//
[BindProperty]
公共文件StaffPhoto{get;set;}
公共字符串ImageName{get;set;}
公共异步任务OnGetAsync(int?StaffID)
{
StaffGender=新选择列表(_context.Gender,“StaffGender”,“StaffGender”);
StaffReligion=新选择列表(_context.Religion,“StaffReligion”,“StaffReligion”);
StaffBioData=wait _context.StaffBioData.FirstOrDefaultAsync(m=>m.StaffID==StaffID);
DirectoryInfo di=newdirectoryinfo(Path.Combine(_env.WebRootPath,“Documents/OnBoardingAttachments”,StaffBioData.EmpID.ToString());
}
公共异步任务OnPostUpdateBioDataAsync(StaffBioData StaffBioData)
{
StaffGender=新选择列表(_context.Gender,“StaffGender”,“StaffGender”);
StaffReligion=新选择列表(_context.Religion,“StaffReligion”,“StaffReligion”);
如果(!ModelState.IsValid)
{
返回页();
}
其他的
{
var biodata=来自_上下文中的u。StaffBioData选择u;
biodata=biodata.Where(s=>s.StaffID.Equals(StaffBioData.StaffID));
StaffIDExists=biodata.AsNoTracking().FirstOrDefault();
_context.Entry(StaffBioData).State=StaffIDExists==null?
EntityState。添加了:
修改的实体状态;
wait_context.SaveChangesAsync();
var filesave=Path.Combine(_env.WebRootPath,“Documents/OnBoardingAttachments”,StaffBioData.EmpID,“IM-”+StaffBioData.EmpID+StaffPhoto.FileName);
使用(var stream=System.IO.File.Create(filesave))
{
等待StaffPhoto.CopyToAsync(流);
//TempData[“Success”]=“Success”;
ImageName=“IM-”+StaffBioData.EmpID+StaffPhoto.FileName;
}
返回新的OkResult();
}
}
Biodata.cshtml
<!-- Photo -->
<div class="form-group">
<label class="control-label-staff"><b>Photo</b></label>
<span>
<br />
<img src="~/Documents/OnBoardingAttachments/@Request.Query["EmpID"].ToString()/@Model.ImageName" />
</span>
<input type="file" asp-for="StaffPhoto" class="form-control-staff" accept="image/*" style="border:1px solid white;margin-right:20px" />
</div>
照片
现在发生的事情是在编辑屏幕中,我没有得到@Model.ImageName的值
我的文件夹也会有其他文件,但我只需要显示前缀为“IM-”的文件
如需有关如何仅显示带有前缀的文件
IM-
,请检查以下代码,我们将不胜感激
public async Task OnGetAsync(int? StaffID)
{
StaffGender = new SelectList(_context.Gender, "StaffGender", "StaffGender");
StaffReligion = new SelectList(_context.Religion, "StaffReligion", "StaffReligion");
StaffBioData = await _context.StaffBioData.FirstOrDefaultAsync(m => m.StaffID == StaffID);
var filePath = Directory.GetFiles(Path.Combine(_env.WebRootPath, "Documents/OnBoardingAttachments", StaffBioData.EmpID.ToString()));
foreach(var path in filePath)
{
var name = Path.GetFileName(path);
if(name.StartsWith("IM-"))
{
ImageName = name;
}
}
}
结果:
Hi@Teena,我的回答帮你解决了这个问题吗?Hi@Rena,对不起,我会检查这个,我已经用其他方法解决了这个问题。之后,只有我得到了这个解决方案。让我检查一下。如果可行,我会将其标记为解决方案。非常感谢您的支持OK。很高兴您已经解决了您的问题。Hi@Rena,我收到以下错误,'当前命名空间中不存在类型或命名空间名称“GetFiles”。Hi@Teena,请确保使用System.IO添加
代码>或使用:System.IO.Path.GetFileName(Path)
Hi@Rena,我使用的是System.IO,我对GetFileName没有问题,错误显示在Directory.GetFilesHi@Teena,哦,对不起,我犯了错误。您的错误应该在这里:var filePath=Directory.GetFiles
。这是目录而不是路径。很抱歉,我说的可能让您感到困惑。请尝试以下操作:var filePath=System.IO.Directory.GetFiles(System.IO.Path.Combine(_env.WebRootPath,“Documents/OnBoardingAttachments”,StaffBioData.EmpID.ToString())代码>并检查是否仍然出错。我说的对吗?您在这行中出错了吗?