2012-01-07 29 views
0

私は画像をアップロードできるasp.net mvcアプリケーションを持っています。私はそれを行うための最善の方法は何か不思議です。画像を保存する最も良い方法は?

は、今私が持っているこの

HttpPostedFileBase uploadedImg = Session[SessionImgKey] as HttpPostedFileBase; 

if (uploadedImg != null) 
{ 
    string fileName = CreateFile(MyField.Name, uploadedImg); 
    tableA.ImagePath = String.Concat(ImgFolderPathLoctaion, "\\", fileName); 
} 

これは結構ですが、私はそれを私のサービス層を移動すると、私は私のサービス層のプロジェクトにインポートしてweb.dllを持っている必要はありません。

ストリームを使用する必要がありますか?あなたがダウンしてあなたのサービス層にファイルを渡す必要がある場合やImage Saveのようなもの(私はこれがアップロードされた塗料クラスではない画像を通じて画像のためのより多くのギヤードかもしれないと思う。

+2

アップロードされたファイルがセッションに保存されているのはなぜですか? – alexn

+0

jquery formwizardがありますそれはajaxによって(シリアル化を使用して)ポストされます。 ajaxでファイルを投稿することはできません(iframeまたはhtml5を使用せずに)。 pluploadを使用してアップロードボタンを押す必要があったため、セッションに保存され、フォーム全体を送信するとセッションから取り除かれました。 – chobo2

答えて

1

投稿されたファイルからイメージストリームを取得し、イメージ(System.Drawing)に変換して保存することができます。

このようにすると、サービスレイヤーはWeb /プレゼンテーションレイヤーを認識しません。
var stream = uploadedImg.InputStream; 
var buffer = new byte[stream.Length]; 
stream.Read(buffer, 0, buffer.Length); 
//convert stream into image 
Image myImage = Image.FromStream(new MemoryStream(buffer)); 
myImage.Save("c:\myimage.jpg"); 
+0

これは、ストリームリーダ/ライタを使用してバイトを書き込むよりも優れていますか? – chobo2

+0

HttpPostedFileBaseのInputStreamプロパティはアップロードされたファイルのストリームを返すので、ストリームリーダーが不要です。ImageのSaveメソッドは、ファイルに書き込みます。バッファされたイメージの内容です。ストリームでも同じことが行われます。ライター。結果は同じです。 –

+0

アップロードした同じファイル拡張子を使用するか、標準を強制する必要があると思いますか?(例えば、すべてをjpgとして保存しますか?) – chobo2

0

、ストリームを渡すためにHttpPostedFileBaseのInputStreamプロパティを使用します。

+0

これは私がやることですが、サーバーに書き込む最良の方法は何ですか?ストリームリーダーとライターを使用しますか? – chobo2

関連する問題