2013-10-29 69 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

相關問題