`
sumongh
  • 浏览: 222969 次
  • 性别: 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页面上传图片的代码, Apache commons-fileupload是一个很好的文件上传工具,最近使用commons-fileupload实现了图片的上传及显示,可将图片保存在指定的文件夹中,也可以将图片存放在数据库,并支持四种常用...

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

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

    Web图片上传控件开发文档-JSP版

    1. 基于标准HTTP协议,支持ASP,ASP.NET(C#),ASP.NET(VB),JSP,PHP等服务端语言。 2. 支持BMP,JPG,GIF,...12. 显示上传进度。 13. 自定义图片水印。 14. 免费提供JavaScript SDK包,方便您将插件快速集成到已有网站中。

    web网页批量上传图片代码

    在最新版的图片上传控件中采用了全新的网络数据传输模块,新的模块全面优化了网络层的数据处理代码,同时在接收服务器返回的数据代码中采用精确识别的方式使数据处理效率更高。这些改进使图片上传控件具有了闪电般的...

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

    第一次上传的代码有错,现在这个版本的,附带了正确的代码以及附带了jspSmartUpload.jar,直接解压缩后部署在Tomcat的webapps下即可。

    php批量上传图片代码

    在最新版的图片上传控件中采用了全新的网络数据传输模块,新的模块全面优化了网络层的数据处理代码,同时在接收服务器返回的数据代码中采用精确识别的方式使数据处理效率更高。这些改进使图片上传控件具有了闪电般的...

    jsp+servlet实现图片上传

    使用jsp+servlet实现图片的上传保存,有完整的可运行的代码。

    jsp ajax 文件上传(包含图片)

    在这里我说明一下,我举得例子是即时上传头像功能,记住,只能显示服务器上的图片,所以你的图像路径为服务器的路径,例如我的是img/wenjianming.jpg,看到了吧,img就是webcontent的一个文件夹,我把文件上传到这个...

    jsp+servlet上传图片的example

    具体参考:www.thinkerso.com thinker搜索 jsp+servlet上传图片的example,全部完整的代码

    jQuery缩略图和blob的jsp代码

    blob oracle 图片jsp 上传显示 jQuery缩略图显示 单独用参考

    JSP网页编辑器CKEditor含图片上传功能.rar

    JSP网页编辑器CKEditor含图片上传功能,本编辑器中含有一个本地图片自动上传插件,插件使用JAVA技术开发,需要配合JavaScript使用,可以将网页中含有的本地图片(src为'file:///')自动上传到服务器并修改img标签的...

    jsp中点击图片弹出文件上传界面及实现预览实例详解

    jsp中点击图片弹出文件上传界面及实现预览实例详解 花了两天时间琢磨一下图片预览的功能 任务需求如下: 1:jsp页面中有一个图片(pic_1) 2:点击图片弹出类似于资源管理器的界面 3:选择完某一个图片之后在pic_1处...

    ckeditor+ckfinder富文本编辑器实现jsp图片上传以及显示功能,完美直接运行,不用修改

    然后选择”上传“,选择图片文件之后,再点击“上传到服务器”,即可在“图像”标签栏显示预览图像,可以在此调整尺寸大小等参数,点击“确定”即可插入进去,提交之后会显示图片,不用修改任何代码 如果要插入到...

    仿新浪flash上传头像剪裁预览组件无水印(php jsp asp.net asp)

    3.无论图片过大还是过小,都可以按照固定大小显示 4.支持亮度,对比度,饱和度修饰 5.支持头像拍照保存 6.支持php,asp,jsp,asp.net 调用 7.兼容性好,任何浏览器 IE10, IE9, IE8, IE7 IE 6 ,firefox, chrome 都...

    java上传图片实时显示,兼容ie11

    java上传图片实时显示,兼容ie11,jsp页面代码,js代码,后台java代码一并打包。

    最全的jsp网店源码

    管理员后台编辑器上传图片功能 后台对前台用户评论的设置功能,包括游客是否允许评论,会员是否允许评论,评论关键字过滤功能 商品收藏夹 订单管理 购物车功能 收货地址维护功能 系统 DIV+CSS界面设计 在线...

    ajax上传的实现JSP环境带进度条.rar

    ajax上传的实现JSP环境带进度条,本程序可实现大常常用的文件上传、图片上传功能,希望大家喜欢。

    jsp中实现上传图片即时显示效果功能

    代码如下:[removed] function setImagePreview() { var docObj=document.getElementById(“doc”); var imgObjPreview=document.getElementById(“preview”); if(docObj.files && docObj.files[0]){ //火狐下,直接...

    图片动画JSP目录直读程序-jsp-mlzd.rar

    "目录直读程序"可能是指一个能够读取并显示服务器上特定目录结构的JSP应用程序。这样的程序可能允许用户浏览文件和文件夹,查看文件列表,甚至可能包括下载、上传或管理这些文件的功能。这个资料包可能包含了实现这...

    JSP实现 Ajax-upload 的源码(进度条效果).rar

    Ajax-upload 的JSP实现源码,运行于JSP环境,含相关的JAVA源代码,学习Java比较不错,同时本程序实现带上传进度条上传图片、文件等,上传程序是大家经常用到的模块,你可将本模块摘录出来用到你的JSP项目中。

Global site tag (gtag.js) - Google Analytics