Javascript 使用ASP.net Core中的标记帮助程序将图像上载为b64字符串
嗨,伙计们,我需要在表单中的其他填充值中发送一个编码为b64字符串的图像 我知道我可以做一个Ajax-post,但是有没有办法使用标记帮助器来做同样的事情呢 表格如下:Javascript 使用ASP.net Core中的标记帮助程序将图像上载为b64字符串,javascript,asp.net-core,asp.net-core-mvc,base64,tag-helpers,Javascript,Asp.net Core,Asp.net Core Mvc,Base64,Tag Helpers,嗨,伙计们,我需要在表单中的其他填充值中发送一个编码为b64字符串的图像 我知道我可以做一个Ajax-post,但是有没有办法使用标记帮助器来做同样的事情呢 表格如下: <form class="form-padding" method="post"> <a href="#"><img src=".." id="image"></a> <input type="file" class="form-control" asp-for="I
<form class="form-padding" method="post">
<a href="#"><img src=".." id="image"></a>
<input type="file" class="form-control" asp-for="ImageUrl" id="dp-upload" onchange="readURL(this);">
<label asp-for="FirstName"></label>
<input asp-for="FirstName" />
<label asp-for="LastName"></label>
<input asp-for="LastName" />
<label asp-for="Address">Address</label>
<input asp-for="Address" />
<button type="submit">Add </button>
</form>
<script>
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#image').attr('src', e.target.result);
$('#dp-upload').attr('val', e.target.result);
debugger
}
reader.readAsDataURL(input.files[0]);
}
}
<script>
地址
添加
函数readURL(输入){
if(input.files&&input.files[0]){
var reader=new FileReader();
reader.onload=函数(e){
$('#image').attr('src',e.target.result);
$('dp upload').attr('val',e.target.result);
调试器
}
reader.readAsDataURL(input.files[0]);
}
}
我试图找出是否有一种方法可以使用标记帮助器,将图像作为base 64编码字符串发送
我还尝试获取上传文件的完整路径,以便在控制器中将其转换为base 64字符串
但是,我得到的只是图像名称
所需方向:)
谢谢 不。这是不可能的,也不清楚你为什么要这么做。假设这是一个传统的HTML表单post,您需要将upload字段绑定到
ifformfile
类型的属性。然后,您可以访问流,如果愿意,您可以在以下事实发生后将其转换为Base64:
using (var ms = new MemoryStream())
using (var fs = model.ImageUpload.OpenReadStream())
{
await fs.CopyToAsync(ms);
model.ImageUrl = $"data:{model.ImageUpload.ContentType};base64,{Convert.ToBase64String(ms.ToArray())}";
}
无论如何,您应该避免使用数据URI,尤其是对于用户上传文件。数据URI有两个问题会显著影响页面性能:
数据URI最好用于非常小的简单图像,如图标或其他东西。当你开始将它们用于照片之类的东西时,你会遇到很大的问题。您允许用户上传的事实意味着您甚至无法完全控制数据URI的大小,除非您将上传大小限制在极小的范围内。默认情况下,用户最多可以上载2MB文件。这可能意味着您在HTML文档中发送了3MB或更多的内联数据,坦白说,这简直是疯了。当然,您可以调整或压缩用户上传的图像,使其变小,但您需要记住这样做。不。这是不可能的,而且您不清楚为什么要这样做。假设这是一个传统的HTML表单post,您需要将upload字段绑定到
ifformfile
类型的属性。然后,您可以访问流,如果愿意,您可以在以下事实发生后将其转换为Base64:
using (var ms = new MemoryStream())
using (var fs = model.ImageUpload.OpenReadStream())
{
await fs.CopyToAsync(ms);
model.ImageUrl = $"data:{model.ImageUpload.ContentType};base64,{Convert.ToBase64String(ms.ToArray())}";
}
无论如何,您应该避免使用数据URI,尤其是对于用户上传文件。数据URI有两个问题会显著影响页面性能: