2012-10-12 6 views
5

asp.netファイルアップロードコントロールを使用して複数の画像をアップロードします。このソリューションのための多くの提案があります.. 現在DataTableを使用しています。すべての画像はDataTableビューステートに置かれ、その行をチェックしています。既に存在すればFileNameをチェックしてアップロードしません。しかし ユーザーが別のフォルダ/パスから同じ名前の画像をブラウズ/アップロードするとそれは問題になるでしょう。私のコードはここにありますC#、asp.netで一度に複数の画像をアップロード中にその画像が既に存在するかどうかを確認する方法

private void AttachImage() 
     { 
       string fileName = Convert.ToString(Guid.NewGuid()); 
       string filePath = "images/" + fileName; 
       fileName = Path.GetFileName(ImageUpload.PostedFile.FileName); 
       ImageUpload.SaveAs(Server.MapPath(filePath)); 
       DataTable dt = new DataTable(); 

       DataColumn dc = new DataColumn(); 
       dc = new DataColumn("Name", typeof(String)); 
       dt.Columns.Add(dc); 

       dc = new DataColumn("Path", typeof(String)); 
       dt.Columns.Add(dc); 

       dt.Rows.Add(fileName, filePath); 
       if (ViewState["dt"] == null) 
       { 
        ViewState["dt"] = dt; 
       } 
       else// (ViewState["dt"] != null) 
       { 
        DataTable tmpTable = (DataTable)ViewState["dt"]; 
        tmpTable.Rows.Add(fileName, filePath); 
        ViewState["dt"] = tmpTable; 
       } 


      lstProductsImage.DataSource = (DataTable)ViewState["dt"]; 
      lstProductsImage.DataBind(); 

     } 

2番目:GUIDを使用してイメージを割り当てます。 FileNameを変更するだけで、このファイルがサーバーに存在するかどうかを判断することができないため、適切ではありません。 3番目のオプションは、ファイルがアップロードフォルダに既に存在する場合、既存のファイルを上書きするかどうかをユーザーに尋ねることができます。 またはSystem.IO.File.Exists(pathToCheck))を使用する必要がありますか?

私はあなたの側から良い提案をしたい... ありがとう: Saquib

答えて

2

Dude! コードと私の見解を確認します... 1このシナリオでは、GUIDを使用しないでください。 (例えば、バイト[] imageBytes用;)

byte[] imageBytes; 
    imageBytes = (byte[])dsPhotosFiles.Tables[0].Rows[i]["fileBytes"]; 

ORファイルを読み、次のコード(あなたの要件ごとにそれを変更)

string fileName = System.IO.Path.GetFileName(dsPhotosFiles.Tables[0].Rows[i]["filePath"].ToString()); 

、3-アレイを使用して取得画像のバイト数を使用して 2 - 取得ファイル名データストリームに挿入します。& & FileName + FilePathを((System.IO.File.Exists(Server。MapPath(SavePath + Filename)))))+ ImageBytes

byte [] myData = new Byte [nFileLen];その後

、4-ファイルが(これはあなたに参考になる

System.Drawing.Image.GetThumbnailImageAbort myCallBack = 
         new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback); 
     Bitmap myBitmap; 

     try 
     { 
      myBitmap = new Bitmap(Server.MapPath(sSavePath + sFilename)); 

      // If jpg file is a jpeg, create a thumbnail filename that is unique. 
      file_append = 0; 
      string sThumbFile = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) 
                + sThumbExtension + ".jpg"; 
      while (System.IO.File.Exists(Server.MapPath(sSavePath + sThumbFile))) 
      { 
       file_append++; 
       sThumbFile = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) + 
           file_append.ToString() + sThumbExtension + ".jpg"; 
      } 

      // Save thumbnail and output it onto the webpage 
      System.Drawing.Image myThumbnail 
        = myBitmap.GetThumbnailImage(intThumbWidth, 
               intThumbHeight, myCallBack, IntPtr.Zero); 
      myThumbnail.Save (Server.MapPath(sSavePath + sThumbFile)); 
      imgPicture.ImageUrl = sSavePath + sThumbFile; 

      // Displaying success information 
      lblOutput.Text = "File uploaded successfully!"; 

      // Destroy objects 
      myThumbnail.Dispose(); 
      myBitmap.Dispose(); 
     } 
     catch (ArgumentException errArgument) 
     { 
      // The file wasn't a valid jpg file 
      lblOutput.Text = "The file wasn't a valid jpg file."; 
      System.IO.File.Delete(Server.MapPath(sSavePath + sFilename)); 
     } 

ホープ..コードを次の中からいくつかの助けを得ることができ、それを開いて、本当にJPEGであるかどうかを確認してください... よろしく: Azeem Raavi

0

は、あなたは、Javaスクリプトで試してみましょうそれはあなたがJavaコードで私のaspx flieで

を知る手助けだかもしれ
$("#UPLOAD_BUTTON").uploadify({ 
        'buttonClass' : "ui-icon ui-icon-plus", 
        'swf'   : '/web/uploader/uploadify.swf',     
        'uploader'  : '/web/uploader/Uploadify.ashx?ASPSESSID=<% =Session.SessionID %>', 
        'cancelImage' : '/web/uploader/uploadify-cancel.png', 
        'folder'   : '/uploads', 
        'multi'   : true, 
        'auto'   : true, 
        'checkExisting' : '/web/uploader/Uploadify.ashx?check=true', 
        'queueID'  : "UploadFilesQueue", 
        'buttonText'  : ' ',   
        'hideButton'  : true, 
        'fileTypeExts' : '*.*', 
        'fileTypeDesc' : 'Alle Dateien', 
        'onQueueComplete': function(event,data) {      
        }, 
        postData : { 
        "stepID" : $("#lblStepID").text(), 
        "ASPSESSID" : "<% =Session.SessionID %>",      
        } 
       }); 

SessionIDをパラメータとして渡し、Global.asaxファイルで取得するか、アップロードごとに新しいASP.NETセッションを作成する必要があります。 jquery.uploadify.jsで

あなたはこの機能を見つけて、ここ

function onUploadStart(file) 

それを修正する必要があるファイルのアップロードあなたは、ASHXファイルをあなたからのリターンコードに反応することができます。

私は

ReturnCode=1 -> File allready Exists 
ReturnCode=2 -> File is to Big 

のようなさまざまな条件のためのさまざまなリターンコードを使用

....

1

あなたが(と場所にチェックがある)重複が許可されていない場合は、なぜあなたはファイル名を変更します?下位のアップロードが実行されたときに、元の名前で保存し、File.Existsチェックを使用するだけです。

また、フォルダ/パスについては、コードに基づいてすべてのファイルが画像フォルダにアップロードされるため、問題はありません。

+1

あなたは、あなたがフォルダAから画像abc.pngを選択してアップロードすると、フォルダBから別の別の画像を選択し、その画像が同じであれば名前がabc.pngの場合、画像名を確認すると画像はアップロードできません。同じ名前の画像がすでに存在しているためですテーブルのsts。それが彼の問題です。 –

+0

それが事実なら、私は彼がアップロードから取っているすべてがファイル名であるので、2つのファイルを区別する方法がないので、システムをより高度にする必要があると思う。したがって、GUIDを使用したとしても、アップロード後に保存されるファイルパスは同じになります(images/abc.jpg)。さらに、ViewStatesの使用は、データを保存するための非常に一時的なソリューションです。ポストバックなしでページが訪問されるとすぐに、データはなくなります。その後、GUIDファイル名がすべて一意であるため、File.Existsは機能しなくなりました。 – CoderMarkus