Reputation: 141
[ExternalException (0x80004005): A generic error occurred in GDI+.]
IpitchitImageHandler.Data.ImageRepository.AddNewTempImage(Stream image, String extension, Guid PageId, Guid ImageId, ImageTransformCollection toDoTransforms) +1967
IpitchitImageHandler.Data.ImageRepository.AddNewTempImage(Stream image, String extension, Guid PageId, Guid ImageId) +85
IpitchitWeb.Sell.Controls.UploadImagesSubstep.UploadImages(Object sender, EventArgs e) in F:\Documents and Settings\Vjeran\My Documents\Visual Studio 2008\Projects\Ipitchit\IpitchitWeb\Sell\Controls\UploadImagesSubstep.ascx.cs:88
System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e) +111
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +79
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
my code is:
public void AddNewTempImage(Stream image, string extension, Guid PageId, Guid ImageId,
ImageTransformCollection toDoTransforms)
{
//mapping steam to memory stream so it does support the seek
MemoryStream targetStream = new MemoryStream(ReadStream(image, 1024));
Image ImageToTransform=null;
Image transformedImage = null;
string storagePath = ImageTransformManager.Config.StorageServerPhysicalPath;
Uri storageUrl = new Uri(ImageTransformManager.Config.StorageServerUrl);
//string TempPath = Path.Combine(storagePath, GenerateFileName(extension));
//SaveStream(TempPath, image);
//File.WriteAllBytes(TempPath, ReadStream(image, 1024));
if (!HttpContext.Current.User.Identity.IsAuthenticated)
throw new Exception("Nonauthenticated users image submition is not supported");
try
{
foreach (ImageTransform transform in toDoTransforms)
{
ImageRepositoryTempImage newimage = new ImageRepositoryTempImage();
newimage.ImageGuid = ImageId;
newimage.PageGuid = PageId;
newimage.CreatedBy = HttpContext.Current.User.Identity.Name;
newimage.CreatedDate = DateTime.UtcNow;
newimage.Format = transform.OutputType;
newimage.Width = transform.Width;
newimage.Height = transform.Height;
newimage.Watermark = transform.UseWaterMark;
string filename = GenerateFileName(transform.OutputType);
string fullStoragePath = Path.Combine(storagePath, Path.Combine(transform.StorageFolder, filename));
string fullStorageUrl = CombineUri(storageUrl, Path.Combine(transform.StorageFolder, filename));
newimage.PhysicalStoragePath = fullStoragePath;
newimage.StoragePath = fullStorageUrl;
CheckOrAddImageTransform(transform);
var ImgRepTransform = GetTransformation(transform);
newimage.ImageRepositoryTransformation = ImgRepTransform;
newimage.TransformId = ImgRepTransform.Id;
Bitmap uploaded = new Bitmap(image);
ImageToTransform = (Image)uploaded.Clone();
uploaded.Dispose();
transformedImage = transform.Transform(ImageToTransform);
AddNewTempImage(newimage);
//adding named watermark and transformation
string wname = ImageTransformManager.Config.WaterMarkName;
string wpath = ImageTransformManager.Config.WaterMarkPath;
ChechOrAddWaterMark(wname, wpath);
if (!(string.IsNullOrEmpty(wname) && string.IsNullOrEmpty(wpath)))
newimage.ImageRepositoryWaterMark = GetWatermark(wname, wpath);
transformedImage.Save(fullStoragePath, GetFormat(newimage.Format));
}
}
catch (System.Exception ex)
{
ErrorHandling.LogErrorEvent("Add new temp image method", ex);
throw ex;
}
finally
{
//File.Delete(TempPath);
if (ImageToTransform!=null)
ImageToTransform.Dispose();
image.Dispose();
targetStream.Dispose();
if (transformedImage != null)
transformedImage.Dispose();
}
}
On my local machine everything works - but still happens.. on server (2003) - i have folder permissions .. and everything...
Upvotes: 11
Views: 15567
Reputation: 2511
Try changing you application pool identity setting from ApplicationPoolIdentity to LocalSystem to verify its a permission problem.
However, don't use this setting long-term as it's a security risk; use it only as a diagnosis.
Upvotes: 0
Reputation: 3112
Everyone here (and on this site) has discussed this as due to a permissions error. I've stumbled over another flavor: memory. I ran out of memory and started receiving this error as well. So keep that in mind as another potential source of error.
In my particular case I was running in a .NET application, and running against a number of threads (few enough that I wasn't being held back too much by the GDI+ process-wide lock). Adding a "GC.Collect()" after major tasks finished didn't seem to affect the speed much, but did completely get rid of the out of memory errors.
Upvotes: 1
Reputation: 4298
Please be sure about the path you are using for images,I also face the same error.Check all paths you are using.
Upvotes: 0
Reputation: 45
Do not use direct path
System.Drawing.Image img = Base64ToImage(_ImagePath);
img.Save(_attachmentPath, ImageFormat.Jpeg);
Use Server.MapPath and it will create Directory If needed
System.Drawing.Image img = Base64ToImage(_ImagePath);
img.Save(Server.MapPath(_attachmentPath), ImageFormat.Jpeg);
Upvotes: 0
Reputation: 10033
Make sure IIS_WPG has the correct permissions on your upload folder and also ASPNET.
I just had the same problem and this fixed it.
Don't forget to propagate the permissions through your sub folders if required too ( I may have forgotten that.. :) )
Upvotes: 0
Reputation: 29720
Is your local machine Vista or Windows 7, and your server Windows Server 2003? I believe the GDI+ implementation differs, and you won't see the error on the newer OSs. I'm just running into this issue now, and that's one of the factoids I've come across.
Upvotes: 0
Reputation:
I've got the same error just now and Google help me to find answer: Loading/Saving bitmap causes the locked file.
Workaround is create othe bitmap, save and let it release:
Bitmap tmp = new Bitmap(bitmapToBeSaved); tmp.SaveToFile(fileName);
Upvotes: 0
Reputation: 7313
I hate that error with a passion. Generic Error is possibly the most useless error description ever written.
When I've encountered it the problem as always been related to file IO.
Here is the list of fixes I keep in my notes- Not sure if these apply but they usually do the trick for me.
My apologies if i stole this list from somewhere else. It has been in my notebook for awhile and I can't remember where it came from.
Upvotes: 27
Reputation: 850
This one followed me for a long time. Yes you can check permissions but what you also should do is to dispose of your bitmap correctly.
bitmap.Dispose();
Upvotes: 0
Reputation: 12427
I just had an similar problem (same exception) on my hosted website: It turned out to be a permissions issue, the ASP.NET account was trying to read image files from a directory outside its available scope.
I suggest you double-check the permissions as well as the <trust>
element in web.config, it should be set to "Medium" or higher depending on where the files are located.
Upvotes: 0