提问人:Alva Mira 提问时间:10/23/2023 最后编辑:Alva Mira 更新时间:10/25/2023 访问量:46
如何从 API 中检索 IFormFile 并将其显示在视图中?我希望图像显示在视图中
How do i retrieve IFormFile from API and display it in view? i want the image(s) to be displayed in view
问:
如何从服务器端 API 成功检索 IFormFile 并将其显示在我的视图图像源中。我想知道为什么我所做的从未奏效,直到我意识到我正在使用我在返回的 JSON 中保存的路径,认为它与 mvc web 中的路径相同。请帮我检索IFormFile..我可以成功地将文件保存在服务器的文件系统中,我可以看到文件夹中的文件,然后更正路径,但不能更正文件,所以这就是我现在的问题。我的方式只是在 API 中检索文件的路径。
public async Task<IActionResult> Index()
{
List<Room> kd = new List<Room>();
var client = new RestClient("https://localhost:7186/api/" + "Rooms");
var requset = new RestRequest();
var response = client.Get(requset);
if (response.IsSuccessStatusCode)
{
kd = JsonConvert.DeserializeObject<List<Room>>(response.Content.ToString());
}
var ListRooms = kd.ToList();
return View(ListRooms);
}
在我的模型中,我有一些属性和 IFormFIle,所以它实际上可以检索属性和 IFormFile。使用此方法,我只能获取文件的路径和其他属性。
答:
0赞
Rena
10/24/2023
#1
不确定你的 api 是什么样的,但是对于如何在路径已知的情况下使用 IFormFile 属性创建模型,您可以检查以下代码以创建 IFormFile:
List<Room> model = new List<Room>();
string filePath = "path_to_your_file/image.png";
using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
// Create a FormFile object
var file = new FormFile(stream, 0, stream.Length, null, Path.GetFileName(filePath))
{
Headers = new HeaderDictionary(),
ContentType = "application/octet-stream"
};
model.Add(new Room(){ImgProperty=file });//other property add by yourself...
}
return model;
反序列化工作正常后,可以创建一个扩展方法转换为 base64 字符串以显示为图像:IFormFile
IFormFile
namespace MvcProj.Extension
{
public static class FormFileExtensions
{
public static string ToBase64String(this IFormFile formFile)
{
if (formFile == null)
{
throw new ArgumentNullException(nameof(formFile));
}
using (var memoryStream = new MemoryStream())
{
formFile.CopyTo(memoryStream);
byte[] bytes = memoryStream.ToArray();
return Convert.ToBase64String(bytes);
}
}
}
}
然后在“索引”视图中:
@using MvcProj.Extension;
@model List<Room>
@if(Model!=null)
{
foreach(var item in Model)
{
string base64tostring = FormFileExtensions.ToBase64String(item.ImgFile);//replace with your IFormFile property
var Imagesrc = string.Format("data:Image/*;base64," + base64tostring);
<img src="@Imagesrc" />
}
}
评论
0赞
Rena
10/25/2023
嗨@AlvaMira,如果是这样,您需要编辑您的问题并分享您的 api 是什么样的。另外,请为 api 设置断点,并使用 IFormFile 检查它是否返回正确的模型。
0赞
Rena
10/25/2023
嗨,@AlvaMira,更新了我的答案。请检查。
评论
List<Room>
IFormFile