2009-08-19 28 views
0

私はユーザーがファイルをGoogleデータベースにアップロードできるasp.netアプリケーションを用意しています。ファイルアップロード時に不適切なファイル拡張子とコンテンツタイプを取得する

ファイルをアップロードするときに、content-typeがバイナリファイルの"application/octet-stream"に設定されることがあります。

私はユーザーに尋ねると、彼らは.tifというファイルをアップロードしたと言います。何とかアップロードコントロールが"application/octet-stream"と設定しています。

私のコンピュータから同じ.tifファイルをアップロードすると、正しいコンテンツタイプ(application/octet-stream)でアップロードされます。

私は、ファイルの拡張子に

fileExtension = filUpload.PostedFile.FileName.Substring(filUpload.PostedFile.FileName.LastIndexOf(".") + 1) 

を取得するには、次のコードを使用しています時にはそれは私が窓は、ファイル名に特殊文字を許可しないことを知っている"c:\documen"または"j:\testing"などとして、ファイルの拡張子を返します。

+1

すべての最初の、延長 – BlackTigerX

+1

秒を取得するためにSystem.IO.Path.GetExtensionを使用して、車輪の再発明をしていない、あなたは両方正しいと間違ったとして「application/octet-stream」を言及しています値 – BlackTigerX

答えて

3

ブラウザを使用して、使用可能なMIMEメディアタイプを送信することはできません。クライアントマシンは、特定のファイルタイプに設定されたメディアタイプ情報を持っていない可能性があります(ここではTIFFの場合がそうです)。あるいは、メディアタイプの送信をサポートしていないか、バグが存在する可能性があります過去にIEで)。

ブラウザに依頼して、使用可能なファイル名拡張子を送信することもできません。クライアントマシンは、ファイル拡張子を使用してファイルの種類を判別することはできません。 (実際には、Macと現代のLinuxはタイプを決定するために複数の仕組みを使用しているので、ファイル名の拡張子が誤解を招く可能性があります)。最初の場所で使用可能なファイル名!すべてのOSがディレクトリと拡張子区切り文字にバックスラッシュ文字とドットを使用するわけではありません。提出されたファイル名は実質的に不透明な文字列であり、一般的なケースのいくつかを推測するために使用できますが、決定的なものとはみなせません。

ので、アップロードされたファイルの種類を決定する唯一の合理的な方法があります。

  1. は、彼らがアップロードどのタイプ明示的にユーザーに確認して下さい。

  2. メディアの種類と末尾のファイル名から、どのような種類のものか推測してみてください。

  3. あなたが許可したいタイプがすべて迷惑なヘッダ(TIFFや他のほとんどの画像フォーマットのもの)を持つタイプのものであれば、そのファイルの内容を調べることでそのタイプを調べることができます。

2

System.IO名前空間の関数を使用して、代わりに解析します。

拡張子を取得するには、あなたがこれを行うだろう:

fileExtension = System.IO.Path.GetExtension(filUpload.PostedFile.FileName);
1

私は、ユーザーのブラウザは、ファイルと一緒に宣言したMIMEタイプを送信することを信じています。次に、ファイルのタイプを宣言するのはブラウザ次第です。異なるブラウザーは、ファイルから最良のMIMEタイプを推論する能力が異なる場合があります。サーバ上でファイルを取得すると、拡張子.tif [f]を確認できます。おそらく、アップロードしているブラウザが何とかしているかどうかのチェックでしょう。

+0

問題はアップロードされたファイルが.tifファイルである必要はありません。それはpdf、単語、テキストファイルなどであることができます – Sridhar

関連する問題