Đây có vẻ là một lỗi của một tai tiếng trên web. Đến nỗi tôi không thể tìm được câu trả lời cho vấn đề của mình vì kịch bản của tôi không phù hợp. Một ngoại lệ được đưa ra khi tôi lưu hình ảnh vào luồng.
Điều kỳ lạ là nó hoạt động hoàn hảo với png nhưng lại đưa ra lỗi trên với jpg và gif khá khó hiểu.
Vấn đề tương tự nhất hiện có liên quan đến việc lưu hình ảnh vào các tệp mà không có quyền. Trớ trêu thay, giải pháp là sử dụng một luồng bộ nhớ như tôi đang làm ....
public static byte[] ConvertImageToByteArray(Image imageToConvert)
{
using (var ms = new MemoryStream())
{
ImageFormat format;
switch (imageToConvert.MimeType())
{
case "image/png":
format = ImageFormat.Png;
break;
case "image/gif":
format = ImageFormat.Gif;
break;
default:
format = ImageFormat.Jpeg;
break;
}
imageToConvert.Save(ms, format);
return ms.ToArray();
}
}
Chi tiết hơn đến ngoại lệ. Lý do điều này gây ra rất nhiều vấn đề là thiếu giải thích :(
System.Runtime.InteropServices.ExternalException was unhandled by user code
Message="A generic error occurred in GDI+."
Source="System.Drawing"
ErrorCode=-2147467259
StackTrace:
at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
at System.Drawing.Image.Save(Stream stream, ImageFormat format)
at Caldoo.Infrastructure.PhotoEditor.ConvertImageToByteArray(Image imageToConvert) in C:\Users\Ian\SVN\Caldoo\Caldoo.Coordinator\PhotoEditor.cs:line 139
at Caldoo.Web.Controllers.PictureController.Croppable() in C:\Users\Ian\SVN\Caldoo\Caldoo.Web\Controllers\PictureController.cs:line 132
at lambda_method(ExecutionScope , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
InnerException:
OK những điều tôi đã cố gắng cho đến nay.
- Nhân bản hình ảnh và làm việc trên đó.
- Truy xuất bộ mã hóa cho MIME đó thông qua cài đặt chất lượng jpeg.