ファイルIO
を使用していますが、ファイルが画像かどうかを確認する方法があるかどうかを知りたいですか?
これは私にはかなりうまくいきます。私が助けてくれることを願っています
import javax.activation.MimetypesFileTypeMap;
import Java.io.File;
class Untitled {
public static void main(String[] args) {
String filepath = "/the/file/path/image.jpg";
File f = new File(filepath);
String mimetype= new MimetypesFileTypeMap().getContentType(f);
String type = mimetype.split("/")[0];
if(type.equals("image"))
System.out.println("It's an image");
else
System.out.println("It's NOT an image");
}
}
if( ImageIO.read(*here your input stream*) == null)
*IS NOT IMAGE*
また、答えがあります: アップロードされたファイルが画像であるか他のファイルであるかを確認する方法
Java 7では、 Java.nio.file.Files.probeContentType() メソッドがあります。Windowsでは、これはファイル拡張子とレジストリを使用します(ファイルの内容を調べないでください。その後、MIMEタイプの2番目の部分を確認し、形式が<X>/image
。
次のようなものを試すことができます:
String pathname="abc\xyz.png"
File file=new File(pathname);
String mimetype = Files.probeContentType(file.toPath());
//mimetype should be something like "image/png"
if (mimetype != null && mimetype.split("/")[0].equals("image")) {
System.out.println("it is an image");
}
次のようなものを試すことができます:
import javax.activation.MimetypesFileTypeMap;
File myFile;
String mimeType = new MimetypesFileTypeMap().getContentType( myFile ));
// mimeType should now be something like "image/png"
if(mimeType.substring(0,5).equalsIgnoreCase("image")){
// its an image
}
これは動作するはずですが、最もエレガントなバージョンではないようです。
これを行うにはさまざまな方法があります。他の回答と関連する質問へのリンクをご覧ください。 (Java 7のアプローチは、デフォルトでプラットフォーム固有の規則を使用し、ファイルタイプの決定に独自のスキームを提供できるため、私にとって最も魅力的だと思われます。)
ただし、完全に確実なメカニズムはないことを指摘したいと思います。
接尾辞が非標準または間違っている場合、ファイルの接尾辞に依存するメソッドはだまされます。
ファイルに不適切なコンテンツタイプ属性があるか、まったくない場合、ファイル属性(ファイルシステムなど)に依存するメソッドはだまされます。
ファイルの署名を見ることに依存しているメソッドは、たまたま同じ署名バイトを持っているバイナリファイルによってだまされる可能性があります。
不幸な場合は、単にファイルを画像として読み取ろうとしても、試行する画像形式によってはだまされる可能性があります。