2013-10-29 44 views
0

我创建了一个表单来将一些图像插入blob字段。要选择我使用的图片如何知道上传的文件是否为图像

<input type="file".... 

我有这种形式:

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

在一个servlet我用这个来“得到”的图像上传

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

但现在我有一个问题:我怎样才能确定一个文件是一个图像,而不是另一个文件改名为图像(例如file.txt renamed file.jpg)?

////////////////////////////////解决方案///////////// ////////////////////////////////////

@sdanzig提供的代码似乎可行。

我只是通过我的InputStream方法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()); 
    } 
+0

看看文件标题来检查它是否是一个有效的图像。有些库可以用于此目的。快速搜索给了我[Java Mime Magic Library](http://sourceforge.net/projects/jmimemagic/),但我确定还有其他的。 – NullUserException

回答

3

您可以使用ImageReader.getFormatName()

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

下面是一个例子:

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(); 
     } 
    } 
} 

它会返回一个字符串,例如: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

+0

它似乎工作,谢谢你 – MDP

相关问题