`
sumongh
  • 浏览: 226405 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JSP上传显示图片代码(转)

阅读更多
Apache commons-fileupload是一个很好的文件上传工具,最近使用commons-fileupload实现了图片的上传及显示,可将图片保存在指定的文件夹中,也可以将图片存放在数据库,并支持四种常用的图片格式:jpg,png,gif,bmp。
  首先,跟上传一般文件一样,需要写一个servlet来处理上传的文件,你可以修改保存路径或选择将图片保存在数据库中,只需要做简单的修改就行了,servlet代码如下:
FileUploadServlet.java
java 代码
  1. package com.ek.servlet;   
  2. import java.awt.image.BufferedImage;   
  3. import java.io.ByteArrayOutputStream;   
  4. import java.io.File;   
  5. import java.io.IOException;   
  6. import java.io.InputStream;   
  7. import java.util.Iterator;   
  8. import java.util.List;   
  9. import java.util.regex.Matcher;   
  10. import java.util.regex.Pattern;   
  11. import javax.servlet.ServletException;   
  12. import javax.servlet.http.HttpServlet;   
  13. import javax.servlet.http.HttpServletRequest;   
  14. import javax.servlet.http.HttpServletResponse;   
  15. import org.apache.commons.fileupload.FileItem;   
  16. import org.apache.commons.fileupload.FileUploadException;   
  17. import org.apache.commons.fileupload.disk.DiskFileItemFactory;   
  18. import org.apache.commons.fileupload.servlet.ServletFileUpload;   
  19. import com.ek.image.ImageUtil;   
  20. public class FileUploadServlet extends HttpServlet {   
  21.  /**  
  22.   *   
  23.   */  
  24.  private static final long serialVersionUID = 1L;   
  25.  private static String filePath = "";   
  26.  /**  
  27.   * Destruction of the servlet. 
     
  28.   */  
  29.  public void destroy() {   
  30.   super.destroy(); // Just puts "destroy" string in log   
  31.   // Put your code here   
  32.  }   
  33.  /**  
  34.   * The doPost method of the servlet. 
     
  35.   *   
  36.   * This method is called when a form has its tag value method equals to  
  37.   * post.  
  38.   *   
  39.   * @param request  
  40.   *            the request send by the client to the server  
  41.   * @param response  
  42.   *            the response send by the server to the client  
  43.   * @throws ServletException  
  44.   *             if an error occurred  
  45.   * @throws IOException  
  46.   *             if an error occurred  
  47.   */  
  48.  public void doPost(HttpServletRequest req, HttpServletResponse res)   
  49.    throws ServletException, IOException {   
  50.   res.setContentType("text/html; charset=UTF-8");   
  51.   DiskFileItemFactory factory = new DiskFileItemFactory();   
  52.   // maximum size that will be stored in memory   
  53.   factory.setSizeThreshold(4096);   
  54.   // the location for saving data that is larger than getSizeThreshold()   
  55.   factory.setRepository(new File(filePath));   
  56.   ServletFileUpload upload = new ServletFileUpload(factory);   
  57.   // maximum size before a FileUploadException will be thrown   
  58.   upload.setSizeMax(1000000);   
  59.   try {   
  60.    List fileItems = upload.parseRequest(req);   
  61.    Iterator iter = fileItems.iterator();   
  62.    // Get the file name   
  63.    String regExp = ".+\\\\(.+\\.?())$";   
  64.    Pattern fileNamePattern = Pattern.compile(regExp);   
  65.    while (iter.hasNext()) {   
  66.     FileItem item = (FileItem) iter.next();   
  67.     if (!item.isFormField()) {   
  68.      String name = item.getName();   
  69.      long size = item.getSize();   
  70.      if ((name == null || name.equals("")) && size == 0)   
  71.       continue;   
  72.      Matcher m = fileNamePattern.matcher(name);   
  73.      boolean result = m.find();   
  74.      if (result) {   
  75.       try {   
  76.        // String type =   
  77.        // m.group(1).substring(m.group(1).lastIndexOf('.')+1);   
  78.        InputStream stream = item.getInputStream();   
  79.        ByteArrayOutputStream baos = new ByteArrayOutputStream();   
  80.        byte[] b = new byte[1000];   
  81.        while (stream.read(b) > 0) {   
  82.         baos.write(b);   
  83.        }   
  84.        byte[] imageByte = baos.toByteArray();   
  85.        String type = ImageUtil.getImageType(imageByte);   
  86.        if (type.equals(ImageUtil.TYPE_NOT_AVAILABLE))   
  87.         throw new Exception("file is not a image");   
  88.        BufferedImage myImage = ImageUtil   
  89.          .readImage(imageByte);   
  90.        // display the image   
  91.        ImageUtil.printImage(myImage, type, res   
  92.          .getOutputStream());   
  93.        // save the image   
  94.        // if you want to save the file into database, do it here   
  95.        // when you want to display the image, use the method printImage in ImageUtil    
  96.        item.write(new File(filePath + "\\" + m.group(1)));  
  97.          
  98.        stream.close();  
  99.        baos.close();  
  100.       } catch (Exception e) {  
  101.        e.printStackTrace();  
  102.       }  
  103.      } else {  
  104.       throw new IOException("fail to upload");  
  105.      }  
  106.     }  
  107.    }  
  108.   } catch (IOException e) {  
  109.    e.printStackTrace();  
  110.   } catch (FileUploadException e) {  
  111.    e.printStackTrace();  
  112.   }  
  113.  }  
  114.  /**  
  115.   * Initialization of the servlet. 
     
  116.   *   
  117.   * @throws ServletException  
  118.   *             if an error occure  
  119.   */  
  120.  public void init() throws ServletException {  
  121.   // Change the file path here  
  122.   filePath = getServletContext().getRealPath("/");   
  123.  }   
  124. }   
servlet中使用到一个ImageUtil类,其中封装了图片处理的实用方法,用于读写图片,代码如下:
 
ImageUtil.java
java 代码
  1. package com.ek.image;   
  2. import java.awt.Component;   
  3. import java.awt.Graphics2D;   
  4. import java.awt.GraphicsConfiguration;   
  5. import java.awt.GraphicsDevice;   
  6. import java.awt.GraphicsEnvironment;   
  7. import java.awt.Image;   
  8. import java.awt.MediaTracker;   
  9. import java.awt.image.BufferedImage;   
  10. import java.awt.image.ColorModel;   
  11. import java.awt.image.PixelGrabber;   
  12. import java.io.ByteArrayInputStream;   
  13. import java.io.IOException;   
  14. import java.io.InputStream;   
  15. import java.io.OutputStream;   
  16. import java.util.Iterator;   
  17. import javax.imageio.ImageIO;   
  18. import javax.imageio.ImageReader;   
  19. import javax.imageio.stream.MemoryCacheImageInputStream;   
  20. import net.jmge.gif.Gif89Encoder;   
  21. import org.apache.commons.logging.Log;   
  22. import org.apache.commons.logging.LogFactory;   
  23. import com.sun.imageio.plugins.bmp.BMPImageReader;   
  24. import com.sun.imageio.plugins.gif.GIFImageReader;   
  25. import com.sun.imageio.plugins.jpeg.JPEGImageReader;   
  26. import com.sun.imageio.plugins.png.PNGImageReader;   
  27. /**  
  28.  * @author Erick Kong  
  29.  * @see ImageUtil.java  
  30.  * @createDate: 2007-6-22  
  31.  * @version 1.0  
  32.  */  
  33. public class ImageUtil {   
  34.     
  35.  public static final String TYPE_GIF = "gif";   
  36.  public static final String TYPE_JPEG = "jpeg";   
  37.  public static final String TYPE_PNG = "png";   
  38.  public static final String TYPE_BMP = "bmp";   
  39.  public static final String TYPE_NOT_AVAILABLE = "na";   
  40.  private static ColorModel getColorModel(Image image)   
  41.    throws InterruptedException, IllegalArgumentException {   
  42.   PixelGrabber pg = new PixelGrabber(image, 0011false);   
  43.   if (!pg.grabPixels())   
  44.    throw new IllegalArgumentException();   
  45.   return pg.getColorModel();   
  46.  }   
  47.  private static void loadImage(Image image) throws InterruptedException,   
  48.    IllegalArgumentException {   
  49.   Component dummy = new Component() {   
  50.    private static final long serialVersionUID = 1L;   
  51.   };   
  52.   MediaTracker tracker = new MediaTracker(dummy);   
  53.   tracker.addImage(image, 0);   
  54.   tracker.waitForID(0);   
  55.   if (tracker.isErrorID(0))   
  56.    throw new IllegalArgumentException();   
  57.  }   
  58.  public static BufferedImage createBufferedImage(Image image)   
  59.    throws InterruptedException, IllegalArgumentException {   
  60.   loadImage(image);   
  61.   int w = image.getWidth(null);   
  62.   int h = image.getHeight(null);   
  63.   ColorModel cm = getColorModel(image);   
  64.   GraphicsEnvironment ge = GraphicsEnvironment   
  65.     .getLocalGraphicsEnvironment();   
  66.   GraphicsDevice gd = ge.getDefaultScreenDevice();   
  67.   GraphicsConfiguration gc = gd.getDefaultConfiguration();   
  68.   BufferedImage bi = gc.createCompatibleImage(w, h, cm.getTransparency());   
  69.   Graphics2D g = bi.createGraphics();   
  70.   g.drawImage(image, 00null);   
  71.   g.dispose();   
  72.   return bi;   
  73.  }   
  74.  public static BufferedImage readImage(InputStream is) {   
  75.   BufferedImage image = null;   
  76.   try {   
  77.    image = ImageIO.read(is);   
  78.   } catch (IOException e) {   
  79.    // TODO Auto-generated catch block   
  80.    e.printStackTrace();   
  81.   }   
  82.   return image;   
  83.  }   
  84.     
  85.  public static BufferedImage readImage(byte[] imageByte) {   
  86.   ByteArrayInputStream bais = new ByteArrayInputStream(imageByte);   
  87.   BufferedImage image = readImage(bais);   
  88.   return image;   
  89.  }   
  90.  public static void encodeGIF(BufferedImage image, OutputStream out)   
  91.    throws IOException {   
  92.   Gif89Encoder encoder = new Gif89Encoder(image);   
  93.   encoder.encode(out);   
  94.  }   
  95.  /**  
  96.   *   
  97.   * @param bi  
  98.   * @param type  
  99.   * @param out  
  100.   */  
  101.  public static void printImage(BufferedImage bi, String type,   
  102.    OutputStream out) {   
  103.   try {   
  104.    if (type.equals(TYPE_GIF))   
  105.     encodeGIF(bi, out);   
  106.    else  
  107.     ImageIO.write(bi, type, out);   
  108.   } catch (IOException e) {   
  109.    // TODO Auto-generated catch block   
  110.    e.printStackTrace();   
  111.   }   
  112.  }   
  113.  /**  
  114.   * Get image type from byte[]  
  115.   *   
  116.   * @param textObj  
  117.   *            image byte[]  
  118.   * @return String image type  
  119.   */  
  120.  public static String getImageType(byte[] textObj) {   
  121.   String type = TYPE_NOT_AVAILABLE;   
  122.   ByteArrayInputStream bais = null;   
  123.   MemoryCacheImageInputStream mcis = null;   
  124.   try {   
  125.    bais = new ByteArrayInputStream(textObj);   
  126.    mcis = new MemoryCacheImageInputStream(bais);   
  127.    Iterator itr = ImageIO.getImageReaders(mcis);   
  128.    while (itr.hasNext()) {   
  129.     ImageReader reader = (ImageReader) itr.next();   
  130.     if (reader instanceof GIFImageReader) {   
  131.      type = TYPE_GIF;   
  132.     } else if (reader instanceof JPEGImageReader) {   
  133.      type = TYPE_JPEG;   
  134.     } else if (reader instanceof PNGImageReader) {   
  135.      type = TYPE_PNG;   
  136.     } else if (reader instanceof BMPImageReader) {   
  137.      type = TYPE_BMP;   
  138.     }   
  139.     reader.dispose();   
  140.    }   
  141.   } finally {   
  142.    if (bais != null) {   
  143.     try {   
  144.      bais.close();   
  145.     } catch (IOException ioe) {   
  146.      if (_log.isWarnEnabled()) {   
  147.       _log.warn(ioe);   
  148.      }   
  149.     }   
  150.    }   
  151.    if (mcis != null) {   
  152.     try {   
  153.      mcis.close();   
  154.     } catch (IOException ioe) {   
  155.      if (_log.isWarnEnabled()) {   
  156.       _log.warn(ioe);   
  157.      }   
  158.     }   
  159.    }   
  160.   }   
  161.   if (_log.isDebugEnabled()) {   
  162.    _log.debug("Detected type " + type);   
  163.   }   
  164.   return type;   
  165.  }   
  166.  private static Log _log = LogFactory.getLog(ImageUtil.class);   
  167. }   
注意:对gif格式的图片进行处理的时候,需要另外一下jar包:gif89.jar,因为gif格式的图片不能使用ImageIO进行输出。
  如需将图片存放到数据库中,只需要修改红色部分,将图片以blob格式保存到数据库中,显示时以byte[]格式读出,使用ImageUtil.printImage()进行输出。
分享到:
评论
5 楼 zuowangxi 2009-09-06  
geeksun 写道
import net.jmge.gif.Gif89Encoder;  
Gif89Encoder 这个类没贴出来

确实。
4 楼 zuowangxi 2009-09-06  
Gif89Encoder
这个类在哪里呀?
我想要运行下你的代码都不行啊、、、、
3 楼 nannancya 2009-07-22  
     [b][/b]
2 楼 geeksun 2009-01-14  
import net.jmge.gif.Gif89Encoder;  
Gif89Encoder 这个类没贴出来
1 楼 lsk 2007-12-18  
非常好.这种判断比用后缀名判断好多了.
顶楼主一下.

相关推荐

    Jsp中显示本地图片预览

    在JSP(JavaServer Pages)中,显示本地图片预览是一项常见的需求,特别是在网页开发中。JSP是一种基于Java的动态网页技术,它允许开发者在HTML、XML或其他标记语言中嵌入Java代码,以实现服务器端的数据处理和动态...

    jsp上传图片直接显示在页面上,写好的代码

    上传图片时,选择图片之后显示在页面上,现成的代码,直接使用即可

    jsp显示数据库图片

    5. **图片显示流程**:当需要显示图片时,JSP页面发送一个HTTP请求到对应的Servlet。Servlet查询数据库,找到对应图片的二进制数据,然后将数据转换为InputStream。接下来,Servlet设置响应的Content-Type为"image/...

    jsp图片上传完整代码

    7. **示例代码**:在提供的文件中,"JSP上传图片前预览图片实现方法及代码.txt"很可能包含了实现这一功能的具体代码片段,而"jsp图片上传代码(简单点)-一维可航 - 新浪BLOG.htm"可能是完整的JSP上传页面的示例。...

    JSP使用jspSmartUpload上传并显示图片新闻示例

    **JSP SmartUpload上传并显示图片新闻示例** 在Web开发中,经常需要处理用户上传文件的功能,尤其是图片。`JSP SmartUpload`是一个强大的Java Servlet组件,它简化了文件上传的过程,支持多文件上传、文件大小限制...

    上传并显示图片(使用jsp+tag编程,实现上传并显示图片功能)

    以上就是使用JSP和Tag实现上传并显示图片功能的详细步骤。这个过程涉及到前端交互、后端处理、自定义标签的创建以及服务器配置,对于理解和实践Web开发中的文件操作和自定义标签机制非常有帮助。

    在JSP中上传图片和缩略显示图片(修正)

    总的来说,"在JSP中上传图片和缩略显示图片"涉及到了以下几个关键知识点: 1. JSP文件上传:使用multipart/form-data编码类型,结合jspSmartUpload库处理文件上传。 2. 文件操作:将上传的图片保存到服务器指定位置...

    JSP源码,图片上传,进度条,JSP图片上传实例

    在这个“JSP源码,图片上传,进度条,JSP图片上传实例”的主题中,我们将深入探讨如何使用JSP进行图片上传,并结合进度条展示上传进度。 首先,图片上传功能是网站或应用程序中常见的一种交互需求。用户可以通过这种...

    简单的servlet+jsp图片上传并显示图片解压就可用

    在本文中,我们将深入探讨如何使用Servlet和JSP实现一个简单的图片上传并显示的功能。Servlet是一种Java编程技术,常用于扩展服务器的功能,处理HTTP请求,而JSP(JavaServer Pages)则是一种动态网页技术,可以方便...

    jsp上传图片预览

    在这个场景中,"jsp上传图片预览"是一个常见的需求,它涉及到用户在上传图片前能够在网页上预览所选的图片。这一功能不仅提升了用户体验,也减少了因上传错误图片而导致的不必要的麻烦。 首先,我们需要了解图片...

    Jsp图片上传资料并将图片路径上传至数据库

    本文将详细讲解如何实现一个基于JSP的图片上传功能,并将图片路径存储到MSSQL2000数据库中的技术要点。 首先,我们需要理解JSP(JavaServer Pages)的角色。JSP是一种动态网页技术,它允许开发者在HTML页面中嵌入...

    jsp上传图片到数据库

    结合Servlet,JSP能够处理用户提交的数据,比如图片上传功能。在这个场景中,我们将探讨如何使用JSP来实现图片上传到数据库的过程。 首先,我们需要依赖两个关键库:`commons-io-1.3.2-bin.zip` 和 `commons-...

    jsp+servlet 图片上传

    9. **前端展示**:在`JSP`页面上,可以显示上传结果,比如成功信息、错误信息,甚至预览上传的图片。 以上就是`JSP`和`Servlet`结合实现图片上传功能的基本流程。实践中,还可能涉及到安全性优化,如使用MIME类型...

    jsp+jspsmartupload控件上传图片至数据库

    在本文中,我们将深入探讨如何使用JSP与jspsmartupload控件将图片上传到数据库。jspsmartupload是一款强大的JSP文件上传组件,能够帮助开发者处理用户通过表单提交的多个文件。以下是对这个技术栈的详细解析: 1. *...

    JSP图片上传/放大缩小/裁减的源代码

    - 显示图片的长宽和大小,可以通过读取图片文件的元数据来获取,例如使用Java的`ImageIO`类。 7. **PHP替代方案**: - 如果没有JSP的源代码,可以使用PHP的`$_FILES`全局变量来处理图片上传,`move_uploaded_file...

    基于jsp的代码,关于如何把图片上传到硬盘

    本教程将探讨如何使用Java Server Pages (JSP) 技术来实现这个功能,将图片从客户端上传到服务器的硬盘上。JSP是Java平台上的一个动态网页技术,它允许我们混合HTML、CSS和Java代码来创建交互式的网页应用。 首先,...

    JSP显示图片。。。。

    在这个场景中,标题"JSP显示图片"指的是如何在JSP页面上展示用户上传的图片。描述中的“完整的,上传图片之后,显示图片,很好看的”暗示了这个项目可能包含了一个完整的图片上传和显示功能,并且用户体验良好。 在...

    图片上传成功jsp页面不刷新问题

    在JSP页面中,图片上传成功后通常会有一段JavaScript代码负责向服务器发起请求,获取上传成功的图片地址,然后更新到页面上显示。假设代码如下: ```html ${siInfoMap.LOGO}" width="255px" height="66px;" /> ``` ...

    jsp ueditor 上传图片

    3. **初始化编辑器**:在JSP页面的JavaScript代码中,使用`UE.getEditor()`方法初始化UEditor,指定编辑器的ID和相关配置,如图片上传的URL、文件大小限制等。 ```javascript var editor = UE.getEditor('...

    jsp 图片上传 简单实例

    在本文中,我们将深入探讨如何使用JSP(JavaServer Pages)实现一个简单的图片上传功能,包括将图片上传到本地文件夹以及在网页上显示。首先,我们需要了解JSP的基础知识,它是Java EE(Enterprise Edition)的一...

Global site tag (gtag.js) - Google Analytics