2012-01-05 13 views
2

Aで発生したが今..一般的なエラーがGDI +

をローカルホスト上で正常に動作しますが、私がしようとWindows Server 2003の下で実行したときに、私は、エラーメッセージ

これは、コードで取得する画像のアップロード機能を持っています誰も私にジャンプする前に;)私は以前の回答を見ていると私はすべての権限をチェックしましたし、彼らは正しいように見える...フォルダ/パスが存在する、など。Image.FromStream

ImageService imageService = new ImageService(); 

if (fileBase != null && fileBase.ContentLength > 0 && fileBase.ContentLength <= 2097152 && fileBase.ContentType.Contains("image/")) 
{ 
    var uploadedPath = "~/Assets/Images/"; 

    Path.GetExtension(fileBase.ContentType); 
    var extension = Path.GetExtension(fileBase.FileName); 

    if (extension.ToLower() != ".jpg" && extension.ToLower() != ".gif") // only allow these types 
    { 
     photoViewModel.ImageValid = "Not Valid"; 
     ModelState.AddModelError("Photo", "Wrong Image Type"); 
     return View(photoViewModel); 
    } 

    EncoderParameters encodingParameters = new EncoderParameters(1); 
    encodingParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L); 

    ImageCodecInfo jpgEncoder = imageService.GetEncoderInfo("image/jpeg"); 
    var uploadedimage = Image.FromStream(fileBase.InputStream, true, true); 

    Bitmap originalImage = new Bitmap(uploadedimage); 
    Bitmap newImage = new Bitmap(originalImage, 274, 354); 

    Graphics g = Graphics.FromImage(newImage); 
    g.InterpolationMode = InterpolationMode.HighQualityBilinear; 
    g.DrawImage(originalImage, 0, 0, newImage.Width, newImage.Height); 

    var streamLarge = new MemoryStream(); 
    newImage.Save(streamLarge, jpgEncoder, encodingParameters); 

    var fileExtension = Path.GetExtension(extension); 
    string newname; 
    if (photoViewModel.photoURL != null) 
    { newname = photoViewModel.photoURL; } 
    else 
    { newname = Guid.NewGuid() + fileExtension; } 

    var ImageName = newname; 
    newImage.Save(Server.MapPath(uploadedPath) + ImageName); 
    System.IO.File.WriteAllBytes(Server.MapPath(uploadedPath) + ImageName, streamLarge.ToArray()); 

    photoViewModel.uploadedPath = uploadedPath; 
    photoViewModel.photoURL = ImageName; 

    originalImage.Dispose(); 
    newImage.Dispose(); 
    streamLarge.Dispose(); 
    return View(photoViewModel); 
} 
+1

私はあなたがジャンプしないと知っていると知っていますが、不正なアクセス許可の可能性を排除するためには、同じ場所にテストファイル(任意のコンテンツ)を書き込もうとするとよいでしょう。 –

+0

エラーメッセージが表示された場合は、どのメッセージを追加してください – Reniuz

+0

@ Reeniuz:GDIで一般的なエラーが発生しました+ – beebul

答えて

3

を、ストリームはイメージの存続期間中は開いたままでなければなりません。つまり、ストリームがファイルの場合、ファイルは開いたままになります。ストリームを閉じるためにuploadedImageを処理する必要があると思います(GCがuploadedImageをクリーンアップするのを待つ場合、これは未定義の時点で発生するか、まったく発生しない可能性があります)。

+0

したがって、GC.Collect();助けて? – beebul

+2

私はそれをお勧めしません(それはあなたがナットをクラックするためにスレッジハンマーを使用しています)。それが必要でないときにそれを処分するだけです。 –

+0

ありがとうございましたこれは助けて乾杯ジェイソン! – beebul

関連する問題