![](/img/trans.png)
[英]How to Upload Image From Asp.net Core IFormFile to Azure Blob Storage?
[英]How to compress an image from IFormFile before upload to the server ASP.Net Core
我有一个问题,我正在 net core 中创建一个应用程序来上传孩子的信息,但是,主要问题是我拥有的所有图像都来自我的手机,你知道我们谈论的是每张图片 9-15 MB ,所以,我知道我不能告诉用户“有一个限制”,但是,我认为它没有用,所以,有一种方法可以减少图像的大小,从而降低质量吗?。
这是我的方法
班级
public IFormFile ImageFile { get; set; }
方法
if (vm.ImageFile != null && vm.ImageFile.Length > 0)
{
var guid = Guid.NewGuid().ToString();
var file = $"{guid}.jpg";
path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot\\images\\Kids", file);
using (var stream = new FileStream(path, FileMode.Create))
{
//var convertedImage = MagicSolutionGivenByTheAwsomeStackOverFlowCommunity
await vm.ImageFile.CopyToAsync(stream);
}
}
布局
<form asp-action="Create" enctype="multipart/form-data">
<input type="hidden" asp-for="Imagen"/>
<div class="col-sm-4">
<label asp-for="Imagen" class="control-label"></label>
<div>
<input asp-for="ImageFile" class="form-control filestyle"
type="file" data-classbutton="btn btn-secondary"
data-classinput="form-control inline"
data-icon="<span class='fa fa-upload mr'></span>" />
</div>
<span asp-validation-for="Imagen" class="text-danger"></span>
</div>
</form>
对于我的项目,我通常在后端使用这个库: ImageResizer Here from Nuget: nuget ImageResizer
它对于压缩和调整服务器端的大小很有用
相反,我在前端的 JS 中使用它: PlUpload
在此示例中,您可以在客户端Image-Resizing-on-Client-Side 上调整图像大小,或者您可以使用分块来加速上传到客户端并管理服务器上的文件。
您可以使用ImageSharp调整图像大小。 我们用它来制作上传的 IFormFile 的 Thumb 图像。 首先打开一个读取流,然后为该流打开一个 ImageSharp 图像。
using (var stream = file.OpenReadStream())
using (var image = Image.Load(stream))
{
await ResizeAndUploadImageAsync(image, maxWidth, fileName);
}
之后,您使用 MemoryStream 将调整大小的图像保存为 PNG,并在我们的示例中将文件上传到 S3 存储桶。
private async Task ResizeAndUploadImageAsync(Image<Rgba32> image, int maxWidth, string
fileName)
{
using (var writeStream = new MemoryStream())
{
if (image.Width > maxWidth)
{
var thumbScaleFactor = maxWidth / image.Width;
image.Mutate(i => i.Resize(maxWidth, image.Height *
thumbScaleFactor));
}
image.SaveAsPng(writeStream);
await storageService.UploadFileAsync(writeStream, fileName);
}
}
我认为您关注的是一个 JS 库,它可以像Compressor JS一样压缩图像,也许这个库可以帮助您解决问题
您无法有意义地压缩图像,尤其是 JPEG 图像。 至少不是可逆的。 如果来自手机相机的图片为 9-15 MB,则您需要降低分辨率、质量或两者兼而有之。
您可以在客户端中使用 JavaScript 执行此操作,您可以在其中调整图像大小并降低质量,然后上传修改后的图像。 这样做的好处是它还可以节省带宽(上传较小的图像),但缺点是用户可以根据需要绕过它。
或者您可以在服务器端进行修改,那里有很多托管库可以这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.