我有一个 .NET Core API,我想扩展它以异步保存上传的图像。
使用 ImageSharp,如果超出预定义的大小限制,我应该能够检查上传和调整大小。但是我无法进行简单的异步保存工作。
一个简单的(非异步)保存到文件没有问题:
我的控制器从上传中提取 IFormFile 并调用以下方法没有任何问题
public static void Save(IFormFile image, string imagesFolder)
{
var fileName = Path.Combine(imagesFolder, image.FileName);
using (var stream = image.OpenReadStream())
using (var imgIS = Image.Load(stream, out IImageFormat format))
{
imgIS.Save(fileName);
}
}
ImageSharp 目前缺少异步方法,因此需要一种解决方法。
下面的更新代码保存了上传的文件,但格式不正确 - 查看文件时,我收到消息“我们似乎不支持此文件格式”。
该格式是从 ImageSharp Load 方法中提取的。并在保存到 MemoryStream 时使用。
MemoryStream CopyToAsync 方法用于保存到 FileStream 以使上传异步。
public static async void Save(IFormFile image, string imagesFolder)
{
var fileName = Path.Combine(imagesFolder, image.FileName);
using (var stream = image.OpenReadStream())
using (var imgIS = Image.Load(stream, out IImageFormat format))
using (var memoryStream = new MemoryStream())
using (var fileStream = new FileStream(fileName, FileMode.OpenOrCreate))
{
imgIS.Save(memoryStream, format);
await memoryStream.CopyToAsync(fileStream).ConfigureAwait(false);
fileStream.Flush();
memoryStream.Close();
fileStream.Close();
}
}
我无法确定问题出在 ImageSharp Save to MemoryStream 还是 MemoryStream.CopyToAsync 上。
我目前在SixLabors 文档上得到 404 - 希望这不是项目已经折叠的迹象。
如何使上传异步并以正确的格式保存到文件?