Я сохраняю изображение своего веб-сайта в виде массива байтов, но когда я пытаюсь сохранить их в виде файла jpeg, некоторые из этих файлов выдают исключение. Вот мой код для получения изображения:
IList<PropertyInfo> properties = typeof(ApplicationUser).GetProperties()
.Where(x => x.PropertyType == typeof(Byte[])).ToList();
var imaBytes = property.GetValue(user, null) as Byte[];
if (imaBytes == null || imaBytes.Length == 0) continue;
Image userImage = ImageHelper.byteArrayToImage(imaBytes);
userImage.Save(pathname + $@"\{DirName}\" + property.Name + ".jpg", ImageFormat.Jpeg);
а это мой ImageHelper.byteArrayToImage
:
public static Image byteArrayToImage(byte[] byteArrayIn)
{
try
{
using (MemoryStream ms = new MemoryStream(byteArrayIn))
using (var image = Image.FromStream(ms,false,true))
{
byteArrayIn = new byte[0];
return new Bitmap(image);
}
}
catch (Exception e)
{
Logger.log(e);
}
}
редактировать:
я оборачиваю код MemoryStream и изображения с помощью statment и меняю свой код и добавляю метод ImageToDisk:
public static void ImageToDisk(byte[] byteArrayIn, string pathToSave)
{
try
{
using (MemoryStream ms = new MemoryStream(byteArrayIn))
{
using (var image = Image.FromStream(ms, false, true))
{
image.Save(pathToSave, ImageFormat.Jpeg);
image.Dispose();
}
}
}
catch (Exception e)
{
Logger.log(e);
throw;
}
}
и основной код таков:
foreach (var property in properties)
{
try
{
var imaBytes = property.GetValue(user, null) as Byte[];
if (imaBytes == null || imaBytes.Length == 0)
{
continue;
}
ImageHelper.ImageToDisk(imaBytes, pathname + $@"\{DirName}\" + property.Name + ".jpg");
}
catch (Exception ex)
{
LogException(ex);
}
}
но теперь я получаю system.runtime.interopservices.externalexception
РЕДАКТИРОВАТЬ 2:
у меня кружится голова!!! кажется, что некоторые пользователи загружают изображения из IE, а IE меняет тип MIME на изображение/PJPEG
произошла ошибка - это какой-то файл с этим типом MIME, а также некоторые другие файлы image/PJPEG
сохранить правильно без каких-либо исключений как я могу решить эту ошибку??
userImage
расположен правильно. 11.09.2018