2012-03-08 29 views
0

ローカルのサーバーに画像をアップロードするにはasp:FileUploadコントロールがあります。サーバー上のファイルが同じ名前のファイルで上書きされないようにする方法

しかし、私は、ユーザーがサーバー上の既存のイメージと同じファイル名を持つイメージをアップロードするとどうなるかをテストすることにしました。その結果、元のイメージは新しいイメージによって上書きされます。

それぞれのファイルがすでに存在する場合、ファイル名の末尾に数字を追加するコードを書くことを考えましたが、これはユーザーがまだファイル名を提供できない可能性があるため、追加された番号はまだ上書きされています。

この問題を解決するにはどうすればよいでしょうか?

答えて

1

Globally Unique IDentifierを使用すると、各ファイル名が一意であることを確認できます。元のファイル名を保持する場合は、GUIDの接頭辞を付けることができます。

if (File.Exists(fileName)) 
{ 
    fileName = Guid.NewGuid() + fileName; 
} 
+0

私が探していたものです。ありがとう! –

0

常に重複したファイル名のチャンスとは、ユーザーが最初に私は一意であることが保証された名前を使用する選択したファイル名のトラック(すなわちGUIDまたは一部を維持する必要がありますと仮定しているので、プライマリキーのソート)、データベース内のサーバに割り当てられたファイル名とユーザ指定のファイル名との間のマッピングを追跡する。

また、元のファイル名を追跡する必要がない場合は、番号(または「コピー」)を追加することもできます。追加された番号のファイル名が既に存在する場合は、に。これは、ファイルが元のフォルダにコピーされたときにWindowsがデフォルトで行うことです。

1

データベースストアには、fileNamefriendlyFileNameの両方のフィールドがあります。後者のフィールドに元のファイル名を表示し、GUID(.NETのGuid構造を参照)を格納します。

次に、一意の識別子を使用して、アップロードによって生成された物理ファイルに名前を付けることは明らかです。

サイズ、性質、アクセス率などに応じて、これらのファイルをデータベース自体にバイナリ形式で保存することができます。これは良い考えであるかどうかに関係なく、少なくとも1つの利点があります。そのような組織は「スタンドアロン」システムである。

1

簡易回答:正しい名前を入力するようにユーザーに依頼しないでください。

アップロードしたばかりのファイルの一意のファイル名を作成し、後で参照できるようにそのファイルをテーブルに保存する必要があります。

はexampleについて:

Userはfoo.file named fileをuploads。

file_id | file_name | file_rname 
1    39189f9381  foo.file 

この方法では、あなたが心配する必要はありません:ファイルがアップロードされている場合、あなたはそれのためのユニークなファイル名を作成し、データベーステーブル内のユーザー名を保存するので、テーブルの行は次のようになります。ファイルはまだ上書きされているので、ユーザが選択したファイル名を表示することができ、混乱することはありません。

希望します。

関連する問題