所以我有一个base64字符串,该字符串将传递到端点,在端点中需要将其转换为图像,然后将其附加在表单数据中。有可能吗?
现在我有这样的东西
Image img = options.base64String.ToImage();
我希望将图像附加到请求的表单数据中,这样我就可以得到它:
Image img = options.base64String.ToImage();
Request.Form.Files.Add(img); // I want to add the image on something like this
var files = Request.Form.Files;
我想将img附加到Request.Form.Files
还请注意,我只能访问该应用程序的API。
谢谢!
答案 0 :(得分:1)
当然可以。我有一个解决方案,我也在 ASP.NET Web应用中使用图像。
我将图像以byte[]
的形式存储在数据库中,因此为 byte数组,并显示该字节数组中的图像,但是使用{{1} }对象。
例如,我有一个用户模型,存储在数据库中,该用户具有IFormFile
属性,还具有另一个模型(ProfilePic
)用于更新它。
我的模型到数据库:
ViewModel
我用于显示或更新用户个人资料图片的class UserModel
{
public byte[] ProfilePic{get;set;}
}
如下:
ViewModel
显示页面时,我从数据库填充了个人资料照片数组
public class InputModel
{
// actual image
public byte[] ProfilePic { get; set; }
// image to pass to POST method (so to update)
public IFormFile ProfilePicToUpdate { get; set; }
}
在这样的页面上显示个人资料照片:
public async Task<IActionResult> OnGetAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
Input = new InputModel
{
ProfilePic = user.ProfilePic,
XP = user.XP,
Address = user.Address,
BirthDate = user.BirthDate
};
return Page();
}
然后在Post方法中处理图像,如下所示:
<form method="post" enctype="multipart/form-data">
<h4>Profile picture</h4>
@if (Model.Input.ProfilePic != null)
{
<object class="" data="data:image/png;base64,@Convert.ToBase64String(Model.Input.ProfilePic)" width="224" height="224" type="image/png"></object>
}
else
{
<img class="" src="~/images/profilePicDefault50x50.png" width="224" height="224" />
}
<input asp-for="Input.ProfilePicToUpdate" class="form-control" />
<span asp-validation-for="Input.ProfilePicToUpdate" class="text-danger"></span>
<button type="submit" class="btn btn-default">Save</button>
</form>
答案 1 :(得分:1)
HttpRequest
对象无法修改;在整个请求期间,它是不变的。其中包括HttpRequest.Form.Files
。
您可以影响请求输入流数据的处理方式。由于输入流包含“表单”字段,因此可能可以使用过滤器来修改请求中的表单数据。但是,它确实有一些警告:
Form
中读取任何内容),您就来不及了。Form["Hello"]
不能在这里工作-您需要研究HTTP表单的编码方式,精确地解析数据并即时重新创建正确的更改后的表单数据。除非您真的没有其他选择,否则我建议避免这种情况。
一个相对简单的选择是使用实际的请求数据创建一个新的Web请求,并从中返回结果(请确保您发出的请求不会引起另一个请求,否则可能会导致无限循环阻塞您的服务:))。当然,您需要确保所发出的新请求具有所有正确的数据;没有简单的方法可以将HttpRequest
变成新的HttpWebRequest
。