file.type の空文字列は、種類を判定できなかったことを表す。ファイルの中身が空だという意味ではない。画像の受付処理では、MIME タイプの情報とデータ量を確認する処理を分けておく。
ブラウザーは type のためにファイルのバイト列を検査するわけではない。MDN は拡張子などから推定すると説明しており、PNG を .txt に変更すると text/plain になる例も挙げている。環境設定による予想外の値もあるため、type だけで内容を検証した扱いにはできない。
未判定の type を image/jpeg に置き換えると、「種類が分からなかった」という情報が消える。記録では「不明」と「対応外」を区別する。画面にも「ファイル形式を確認できませんでした」など、確認結果に合った説明を出す。
画像として読み込めるかの確認と、アップロード先での内容検証は別に行う。image/png という文字列を受け取っただけでは、正しい PNG が入っていると確かめたことにはならない。ブラウザーの表示とサーバーの受付条件も分けて確認する。
調査用にはファイル名、報告された type、行った確認とその結果を残す。公開する報告には、個人情報のないサンプルと必要な項目だけを使う。拡張子だけを変えて動作が変わった場合も、画像そのものを変換したとは記録しない。
参考: https://developer.mozilla.org/en-US/docs/Web/API/Blob/type