У меня есть. NET Базовый API-интерфейс, который я хотел бы расширить для асинхронного сохранения загруженных изображений.
Используя ImageSharp, я смогу проверить загрузку и изменить размер, если превышены предопределенные ограничения размера. Однако я не могу получить простое asyn c сохранение, работающее.
Простое (не асинхронное c) сохранение в файл работает без проблем:
Мой контроллер извлекает 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 в настоящее время не хватает asyn c методов , поэтому требуется обходной путь.
Обновленный код ниже сохраняет загруженный файл, но формат неправильный - при просмотре файла появляется сообщение « Похоже, мы не поддерживаем этот формат файла ».
Формат извлекается из ImageSharp Load метод. и используется при сохранении в MemoryStream.
Метод MemoryStream CopyToAsyn c используется для сохранения в 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.CopyToAsyn c.
В настоящее время я получаю 404 на Документы SixLabors - надеюсь, не является признаком того, что проект свернут.
Как сделать загрузку asyn c и сохранить в файл в правильном формате?