2016-08-21 3 views
0

一時ファイルを保存する方法を教えてもらえますか?ファイルをアップロードして一時ファイルを作成するが、実際のファイル名をさらに追跡する

たとえば、私は簡単なフォトギャラリー管理を作成しています。 PhotoGalleryIdを外部キーとして使用して、PhotoGalleryと写真の情報をデータベースに保存しています。各写真で私はFileNameを保管しています:すなわち(photoname.jpg)。このようにして、データベースから写真を取得すると、単にファイル名とルートパスを組み合わせてimg srcを設定することができます。

これをさらに強化して、ユーザーがファイルをアップロードするときに、ランダムに生成されたファイル名が使用され、常に一意になるように名前が付けられているようにしたいと思います。さらに、誰かがtempディレクトリを使用するテクニックについて説明し、データベースに一時ファイル名(Photosテーブル)を格納する必要があるかどうかを説明できます。

+0

イメージが格納されているフォルダがわかっていれば、この問題は解決します。私の提案は、フォトイメージのハッシュの一部を使用するか、十分なファイル名の長さで名前をランダムに作成し、一意の制約を保持するdb列に挿入して、ファイル拡張子を別々に保存することです列の中に元のものを保存したい場合は、例えばabc.com/img/h5b923ijoのようなものを作成し、ファイルをintrnally参照して、ちょうどアイデア:) – prizm1

答えて

1

あなたができます

1)は、あなたがしたい場合は、GUIDを使用することを含むもの()に保存する前にファイル名を変更し、そのようにファイルデータを格納します。

Create table fileData(...originalFileName varchar(x), savedFileName varchar(x), basePath varchar(x)...) 

を追跡すること元のアップロードファイル名、ファイルを保存したパス、および保存することを決めたファイル名を入力します。一時ファイルは必要ありません。

2)写真自体をDBに保存し、ディレクトリ/命名の問題を完全に排除します。

詳細をご希望の場合は、コードをご提示ください。

+0

これらの回答に感謝してくれてありがとういくつかの質問:元のファイル名を保存する目的は、ユーザーがファイルをダウンロードする場合、元の名前で元の名前に戻すことができる場合です。そうしないと元のファイル名は正しくありません。 img srcは、実際にディスク上にある名前が正しいので、ランダム生成ファイル名を常に使用しますか?さらに、システム設定の場合はなぜbasePathを格納する必要があるのでしょうか。なぜなら、これをfileNameと組み合わせるだけです。 –

+1

はい - この場合、元のファイル名は必要ないでしょう。あなたがそれをユーザーに返す必要がない限り - それを保存すると言いました。そのように私の答えを作ったのですが、基本的に役に立たないでしょう。ベースパスを保存すると、たくさんのファイル(月ごとまたは1,000ファイルごとに異なるディレクトリ)を取得する場合に備えて、異なるディレクトリを作成することができます。 –

関連する問題