2016-06-22 38 views
1

イメージファイルを渡してそのイメージファイルのバイトを取得できるメソッドを作成しようとしているので、後でそのバイトをデータベースに格納できます。ここに私のコードのメソッドです。HttpPostedFileBaseオブジェクトをバイト配列に変換できません

private byte[] GetImageBytes(HttpPostedFileBase ProfilePhoto) 
    { 
     if (ProfilePhoto != null) 
     { 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       ProfilePhoto.InputStream.CopyTo(ms); 
       byte[] array = ms.GetBuffer(); 
       return array; 
      } 
     } 
     else 
     { 
      return null; 
     } 
    } 

問題は、配列[0]の配列を取得するため、バイトに変換されないことです。

 byte[] image = new byte[ProfilePhoto.ContentLength]; 
     ProfilePhoto.InputStream 
      .Read(image, 0, Convert.ToInt32(ProfilePhoto.ContentLength)); 
     return image; 

が、再びノー成功:デバッグモードでは、私はProfilePhotoがnullではなく、などのLengthプロパティを持っていることがわかります...私は以下のコードをメソッド内のコードを置き換えることによって、別の方法を試してみました。それはデフォルト値である配列0x0000 ...を返します。 この問題を解決するにはどうすればよいですか?おそらくそれは非常にシンプルですが、私はMVCでファイルをアップロードする方法について知識がありません


私はそれを行うための他の方法を見つけようとしましたが、どれも働いていませんでした。あなたはそれをコピーする前に、最初のストリームの開始をシークする必要が

答えて

3

ProfilePhoto.InputStream.Seek(0, SeekOrigin.Begin); 
ProfilePhoto.InputStream.CopyTo(ms); 
+0

感謝の男が、それは私の問題を解決しました。等価で私は第2の方法で問題を発見した。私は 'ProfilePhoto.InputStream.Position = 0;'をしなければなりませんでした。 –

+0

それも動作します。 –

関連する問題