MDP
MDP

Reputation: 4287

How to know if an uploaded file is an image

I created a form to insert some images into a blob field. To select images I use

<input type="file"....

I have this kind of form:

<form enctype="multipart/form-data" method="post" ....

In a servlet I use this to 'get' the images uploaded

 Part immagine = request.getPart("immaginePrincipale");

But now I have a question: how can I be sure that a file is an image and not another file renamed as an image (for example a file.txt renamed file.jpg)?

////////////////////////////////SOLUTION/////////////////////////////////////////////////

The code provided by @sdanzig seems to work.

I just passed my InputStream to the method createImageInputStream()

     ImageInputStream iis = ageIO.createImageInputStream(myInpuStream);
    Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);


    while (readers.hasNext()) {
        ImageReader read = readers.next();
        System.out.println("format name = " + read.getFormatName());
    }

Upvotes: 0

Views: 1943

Answers (1)

sdanzig
sdanzig

Reputation: 4500

You can use ImageReader.getFormatName()

http://docs.oracle.com/javase/7/docs/api/javax/imageio/ImageReader.html#getFormatName()

Here's an example:

import java.io.IOException;
import java.net.URL;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

public class Main {
    public static void main(String[] args) throws IOException {
        URL[] urls = { new URL("http://yourserver/small.png") };
        for (URL url : urls) {
            ImageInputStream iis = ImageIO.createImageInputStream(url
                    .openStream());
            Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);

            System.out.println("url= " + url.getPath());
            while (readers.hasNext()) {
                ImageReader read = readers.next();
                System.out.println("format name = " + read.getFormatName());
            }
            System.out.println();
        }
    }
}

It'll return a string such as: raw, jpeg, tif, WBMP, PNM, JPG, DICOM, wbmp, JPEG, PNG, jpeg 2000, tiff, BMP, JPEG2000, RAW, jpeg2000, GIF, TIF, TIFF, jpg, bmp, pnm, png, JPEG 2000, gif

Upvotes: 3

Related Questions