У меня есть ситуация, когда мне нужно создать FormFile из изображения, а затем мне нужно вернуть MemoryStream из FormFile. MemoryStream из файла находится в другом месте. Я только что сделал это в качестве образца для создания проблемы.
private IFormFile ReturnFormFile(Image image, string thumbnailName)
{
IFormFile file = null;
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, ImageFormat.Jpeg);
file = new FormFile(ms, 0, ms.Length, "name", thumbnailName);
ms.Seek(0, SeekOrigin.Begin);
}
using (System.IO.MemoryStream memStream = new System.IO.MemoryStream())
{
file.CopyTo(memStream);// System.ObjectDisposedException: 'Cannot access a closed Stream.'
Byte[] fileData = memStream.ToArray();
}
return file;
}
Любые предложения, пожалуйста.
using
компилируется в try { } finally { }
, вы можете вместо этого объявить поток памяти как переменную, принадлежащую ReturnFormFile?
Попробуйте так:
private IFormFile ReturnFormFile(Image image, string thumbnailName)
{
IFormFile file = null;
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, ImageFormat.Jpeg);
file = new FormFile(ms, 0, ms.Length, "name", thumbnailName);
ms.Seek(0, SeekOrigin.Begin);
using (System.IO.MemoryStream memStream = new System.IO.MemoryStream())
{
file.CopyTo(memStream);// System.ObjectDisposedException: 'Cannot access a closed Stream.'
Byte[] fileData = memStream.ToArray();
}
return file;
}
}
ms
утилизируется в тот момент, когда выходит за рамки его использования.FormFile
, очевидно, просто хранит ссылку на этот поток, а не делает копию (что имеет смысл). Очевидное решение — не избавляться от него, пока вы этого не захотите.