2009-06-25 26 views
11
[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 

मेरी कोड है:एक सामान्य त्रुटि हुई +

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(); 
     } 

} 

अपने स्थानीय मशीन सब कुछ काम करता है पर - लेकिन अभी भी होता है सर्वर (2003) पर .. - मैं फ़ोल्डर अनुमतियाँ .. और सब कुछ है। ..

+0

क्या आप उस रेखा को इंगित कर सकते हैं जहां अपवाद होता है? –

उत्तर

0

मेरी मेजबानी की वेबसाइट पर मुझे एक ही समस्या (एक ही अपवाद) थी: यह एक अनुमति समस्या साबित हुई, एएसपी.नेट खाता अपने उपलब्ध दायरे से बाहर निर्देशिका से छवि फ़ाइलों को पढ़ने की कोशिश कर रहा था।

मेरा सुझाव है कि आप वेब.कॉन्फिग में अनुमतियों के साथ-साथ <trust> तत्व को दोबारा जांचें, इसे फाइलों के आधार पर "मध्यम" या उच्चतर पर सेट किया जाना चाहिए।

0

यह एक लंबे समय तक मेरे पीछे रहा। हां आप अनुमतियों की जांच कर सकते हैं लेकिन आपको अपने बिटमैप को सही ढंग से निपटाने के लिए क्या करना चाहिए।

bitmap.Dispose(); 
25

मुझे जुनून के साथ उस त्रुटि से नफरत है। जेनेरिक त्रुटि संभवतः कभी भी सबसे बेकार त्रुटि वर्णन लिखा है।

जब मुझे इसका सामना करना पड़ा तो समस्या हमेशा आईओ से संबंधित थी।

यहां मेरे नोट्स में रखे गए फ़िक्सेस की सूची है- सुनिश्चित नहीं है कि ये लागू होते हैं लेकिन वे आमतौर पर मेरे लिए चाल करते हैं।

  • चेक फ़ाइल पथ
    • यकीन है कि मूल निर्देशिका मौजूद है
    • कि पथ सुनिश्चित दोनों फ़ाइल नाम और विस्तार
    • उपयोग Server.MapPath() पथ
  • बनाने के लिए शामिल है
  • सुनिश्चित करें कि फ़ाइल को इसके स्रोत पर वापस नहीं लिखा जा रहा है। यदि आवश्यक हो तो स्ट्रीम बंद करें और फिर से खोलें।

मेरी क्षमा है अगर मैंने इस सूची को कहीं और से चुरा लिया है। यह थोड़ी देर के लिए मेरी नोटबुक में रहा है और मुझे याद नहीं है कि यह कहां से आया था।

+0

यह वास्तव में एक लापता पथ था। – sabbour

+1

यिप - फिर से नियुक्त .. पथ मौजूद नहीं है .. धन्यवाद! जुनून के साथ नफरत के लिए – ppumkin

+1

+1! मुझे एक लापता पथ के लिए भी यह त्रुटि थी। – Curt

0

मैं सहमत हूं कि अनुमतियां यहां समस्या है।

नेटवर्क सेवा शायद?

0

मुझे अभी भी यही त्रुटि मिली है और Google मुझे जवाब खोजने में मदद करता है: लोडमैट लोडिंग/सहेजने से लॉक फ़ाइल का कारण बनता है।

वर्कअराउंड, othe बिटमैप बनाने, सहेजने और इसे जारी करते है:

बिटमैप tmp = नए बिटमैप (bitmapToBeSaved); tmp.SaveToFile (फ़ाइल नाम);

0

क्या आपकी स्थानीय मशीन Vista या Windows 7 है, और आपका सर्वर Windows Server 2003 है? मेरा मानना ​​है कि जीडीआई + कार्यान्वयन अलग है, और आपको नए ओएस पर त्रुटि दिखाई नहीं देगी। मैं अभी इस मुद्दे में अभी चल रहा हूं, और यह उन तथ्यों में से एक है जो मैंने पार किया है।

0

सुनिश्चित करें IIS_WPG अपने अपलोड फ़ोल्डर पर सही अनुमतियाँ है और यह भी ASPNET

मुझे बस एक ही समस्या थी और यह ठीक हो गया।

मत भूलना अपने उप फ़ोल्डरों के माध्यम से प्रचार करने के लिए अनुमति की अगर बहुत आवश्यक (मैं भूल गया हो सकता है कि .. :))

0

प्रत्यक्ष पथ

System.Drawing.Image img = Base64ToImage(_ImagePath); 
    img.Save(_attachmentPath, ImageFormat.Jpeg); 

उपयोग Server.MapPath का उपयोग न करें और यह निर्देशिका पैदा करेगा यदि आवश्यक हो

System.Drawing.Image img = Base64ToImage(_ImagePath); 
    img.Save(Server.MapPath(_attachmentPath), ImageFormat.Jpeg); 
0

कृपया पथ आप छवियों के लिए प्रयोग कर रहे हैं के बारे में सुनिश्चित हो, मैं भी यही error.Check सभी रास्ते का उपयोग कर रहे सामना करना पड़ता है।

1

यहां हर कोई (और इस साइट पर) ने अनुमति त्रुटियों के कारण इस पर चर्चा की है। मैं एक और स्वाद पर ठोकर खाई है: स्मृति। मैं स्मृति से बाहर भाग गया और इस त्रुटि को भी प्राप्त करना शुरू कर दिया। तो इसे त्रुटि के एक अन्य संभावित स्रोत के रूप में ध्यान में रखें।

मेरे विशेष मामले में मैं एक .NET अनुप्रयोग में चल रहा था, और कई धागे के खिलाफ दौड़ रहा था (कुछ पर्याप्त है कि मुझे जीडीआई + प्रोसेस-वाइड लॉक द्वारा बहुत अधिक वापस नहीं रखा जा रहा था)। बड़े कार्यों के समाप्त होने के बाद "जीसी.कोलेक्ट()" जोड़ना गति को बहुत प्रभावित नहीं करता था, लेकिन पूरी तरह से स्मृति त्रुटियों से छुटकारा पाता था।

संबंधित मुद्दे