- PR -

ファイルアップロード時にファイルの種類を画像のみに限定する方法

1
投稿者投稿内容
toto
常連さん
会議室デビュー日: 2005/10/18
投稿数: 46
お住まい・勤務地: 岡山
投稿日時: 2007-01-30 09:56
.NET Framework1.1
ASP.NET(VB.NET)
Windows XP Pro

現在HttpPostedFileを使って、ユーザーに画像アップロードを行わせようと考えています。
この際に、アップロードするファイルをjpg、gif、pngに限定したいと思っています。

コード:

Dim file As HttpPostedFile = Request.Files("file1")

If file.ContentLength > 0 Then

Select Case file.ContentType
Case "image/gif"
GIF画像の処理

Case "image/jpeg", "image/jpg", _
"image/jpe", "image/jfif", _
"image/pjpeg", "image/pjp"
JPEG画像の処理

Case "image/png"
PNG画像の処理

End Select



上記の様なコードを記載したのですが、PNGには"image/x-png"というMIMETYPEがあるのを知りました。
この判定方法だと、GIF、JPG、PNGのファイルに他にもMIMETYPEが存在した場合にアップロードができない場合が発生してしまいます。
何か、他に良い方法はありませんでしょうか?

よろしくお願いします。

[ メッセージ編集済み 編集者: toiry 編集日時 2007-01-30 13:30 ]
しょくぱん
常連さん
会議室デビュー日: 2006/05/31
投稿数: 31
投稿日時: 2007-01-30 10:38
こんにちは。
私はこちらで紹介されている方法を使いましたよ〜。

http://www.atmarkit.co.jp/fdotnet/dotnettips/022getformat/getformat.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/018loadbmp/loadbmp.html
Tasuku
大ベテラン
会議室デビュー日: 2006/09/14
投稿数: 106
お住まい・勤務地: tokyo
投稿日時: 2007-01-30 10:50
アップロードの際にクライアントから送信されてくる Content-Typeは、
あまり信頼性はありません。

たいていのクライアントは、アップロードするファイルの拡張子を元に
設定しているだけですので、zipファイルを、.jpg にリネームしてあれば、
image/jpg としてアップロードされてくることもあります。

また、Content-Type ヘッダ自体を偽装することは可能です。

なので、しょくぱんさんが紹介されたように、アップロードされたデータ
をバイナリレベルで解析して画像ファイルかどうか判定した方が確実かも
知れませんね。

なお、image/x-png の x- は IANA に登録されていない、ユーザが勝手に
拡張したものであることを意味しています。
toto
常連さん
会議室デビュー日: 2005/10/18
投稿数: 46
お住まい・勤務地: 岡山
投稿日時: 2007-01-30 13:29
>しょくぱん さん
有益なリンクを教えていただき、ありがとうございます。

>Tasuku さん
Content-Typeは信頼性がないのですね。。。偽装もできるとは。

そこで、しょくぱんさんに教えていただいた方法で記載してみました。

コード:

Dim file As HttpPostedFile = Request.Files("file1")
Dim imageFile As New Bitmap(file.FileName)
Dim decoders() As ImageCodecInfo = ImageCodecInfo.GetImageDecoders

For Each imgDecode As ImageCodecInfo In decoders
If imgDecode.FormatID.ToString = imageFile.RawFormat.Guid.ToString Then
Select Case imgDecode.FormatDescription
Case "GIF"
'GIFの処理

Case "JPEG"
'JPEGの処理

Case "PNG"
'JPEGの処理

End Select
End If
Next



上記の様にしてみました。
手持ちの画像データでは思ったとおりに判断していますので、問題ないかと。
imgDecode.FormatDescriptionを文字列と比較と言う所が気になりますが。

しょくぱんさん、Tasukuさんありがとうございます。

[ メッセージ編集済み 編集者: toiry 編集日時 2007-01-30 13:29 ]
1

スキルアップ/キャリアアップ(JOB@IT)