2016-10-05 10 views
0

ファイル 'InputStream'をBitmapオブジェクトに渡して、MVCコントローラ内の指定された形式でファイルを保存しようとしました。私はそれを処理したいので、ファイル自体を保存する代わりに、ビットマップ。最初のステップのためのMVCコントローラ、イメージファイルをビットマップに直接渡して保存する方法

は、私が言ったことと同じくらい書いてみました、とPNGをPAS、その後、私は私のPC上で見つかったJPGファイルを、しかし、私は次のエラーが表示されます

一般的なエラーがGDI +で発生しました。

私のコードは次のとおりです。

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create([Bind(Include = "Id,HotelId")] Image image) //, HttpPostedFileBase file) 
{ 
    int arrayStartX; 

    if (ModelState.IsValid) 
    { 
     if (Request.Files.Count > 0) 
     { 
      var file = Request.Files[0]; 

      if (file != null && file.ContentLength > 0) 
      { 
       var fileName = Path.GetFileName(file.FileName); 
       var pathMain = Path.Combine(Server.MapPath("~/Images/HotelGallery/"), 
        "Img" + image.HotelId + "_" + fileName.Remove(fileName.LastIndexOf('.')) + ".jpg"); 
       //file.SaveAs(path); 

       try 
       { 
        file.InputStream.Seek(0, SeekOrigin.Begin); 
        Bitmap mainBmp = new Bitmap(file.InputStream); 
        mainBmp.Save(pathMain, ImageFormat.Jpeg); 

答えて

0

私はGDIを取得することがラフだったが+エラー、それは過去にたくさん直面して、私は自分のファイルシステムで何かがうまくいかないかもしれないという考えを持って来ることはありません。はい、私はいつもGDI +を悪魔として見ていますが、今度は自分自身の責任でした(BTW、Microsoftはより良いエラーを提供するはずです:@)問題は私がディレクトリを生成しなかったことです。それもやってください。

だから私は少しリファクタリングを行い、これに行わ:コードの残り、その後

var fileName = Path.GetFileName(file.FileName); 
var galleryDirectoryPath = Server.MapPath("~/Images/HotelGallery/"); 
var pathMain = Path.Combine(galleryDirectoryPath, 
       "Img" + image.HotelId + "_" + fileName.Remove(fileName.LastIndexOf('.')) + ".jpg"); 

if (!Directory.Exists(galleryDirectoryPath)) 
{ 
    Directory.CreateDirectory(galleryDirectoryPath); 
} 

を。

0

あなたは以下のようなあなたのストリームのコードを試すことができます。

// At this point the new bitmap has no MimeType 
// Need to output to memory stream 

    using (var m = new MemoryStream()) 
    { 
      dst.Save(m, format); 

      var img = Image.FromStream(m); 

      //TEST 
      img.Save("C:\\test.jpg"); 
      var bytes = PhotoEditor.ConvertImageToByteArray(img); 


      return img; 
    } 

ソース:まあA generic error occurred in GDI+, JPEG Image to MemoryStream

+0

フォーマットとは何ですか?私はそれがシリアライズフォーマットで使用されると思う、ソースとしてファイルシステムを使用する...とは何ですか?ストリームもHttpRequestBase(Request.Files)もSaveを持たない – deadManN

関連する問題