`

JSP上传显示图片

gif 
阅读更多

Apache commons-fileupload是一个很好的文件上传工具,最近使用commons-fileupload实现了图片的上传及显示,可将图片保存在指定的文件夹中,也可以将图片存放在数据库,并支持四种常用的图片格式:jpg,png,gif,bmp。

  首先,跟上传一般文件一样,需要写一个servlet来处理上传的文件,你可以修改保存路径或选择将图片保存在数据库中,只需要做简单的修改就行了,servlet代码如下:
FileUploadServlet.java
package com.ek.servlet;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.ek.image.ImageUtil;
public class FileUploadServlet extends HttpServlet {
/**

*/
private static final long serialVersionUID = 1L;
private static String filePath = "";
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
   super.destroy(); // Just puts "destroy" string in log
   // Put your code here
}
/**
* The doPost method of the servlet. <br>

* This method is called when a form has its tag value method equals to
* post.

* @param request
*            the request send by the client to the server
* @param response
*            the response send by the server to the client
* @throws ServletException
*             if an error occurred
* @throws IOException
*             if an error occurred
*/
public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
   res.setContentType("text/html; charset=UTF-8");
   DiskFileItemFactory factory = new DiskFileItemFactory();
   // maximum size that will be stored in memory
   factory.setSizeThreshold(4096);
   // the location for saving data that is larger than getSizeThreshold()
   factory.setRepository(new File(filePath));
   ServletFileUpload upload = new ServletFileUpload(factory);
   // maximum size before a FileUploadException will be thrown
   upload.setSizeMax(1000000);
   try {
    List fileItems = upload.parseRequest(req);
    Iterator iter = fileItems.iterator();
    // Get the file name
    String regExp = ".+\\\\(.+\\.?())$";
    Pattern fileNamePattern = Pattern.compile(regExp);
    while (iter.hasNext()) {
     FileItem item = (FileItem) iter.next();
     if (!item.isFormField()) {
      String name = item.getName();
      long size = item.getSize();
      if ((name == null || name.equals("")) && size == 0)
       continue;
      Matcher m = fileNamePattern.matcher(name);
      boolean result = m.find();
      if (result) {
       try {
        // String type =
        // m.group(1).substring(m.group(1).lastIndexOf('.')+1);
        InputStream stream = item.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] b = new byte[1000];
        while (stream.read(b) > 0) {
         baos.write(b);
        }
        byte[] imageByte = baos.toByteArray();
        String type = ImageUtil.getImageType(imageByte);
        if (type.equals(ImageUtil.TYPE_NOT_AVAILABLE))
         throw new Exception("file is not a image");
        BufferedImage myImage = ImageUtil
          .readImage(imageByte);
        // display the image
        ImageUtil.printImage(myImage, type, res
          .getOutputStream());
       // save the image
        // if you want to save the file into database, do it here
        // when you want to display the image, use the method printImage in ImageUtil 
        item.write(new File(filePath + "\\" + m.group(1)));
       
        stream.close();
        baos.close();
       } catch (Exception e) {
        e.printStackTrace();
       }
      } else {
       throw new IOException("fail to upload");
      }
     }
    }
   } catch (IOException e) {
    e.printStackTrace();
   } catch (FileUploadException e) {
    e.printStackTrace();
   }
}
/**
* Initialization of the servlet. <br>

* @throws ServletException
*             if an error occure
*/
public void init() throws ServletException {
   // Change the file path here
   filePath = getServletContext().getRealPath("/");
}
}
  servlet中使用到一个ImageUtil类,其中封装了图片处理的实用方法,用于读写图片,代码如下:
ImageUtil.java
package com.ek.image;
import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.PixelGrabber;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.MemoryCacheImageInputStream;
import net.jmge.gif.Gif89Encoder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.sun.imageio.plugins.bmp.BMPImageReader;
import com.sun.imageio.plugins.gif.GIFImageReader;
import com.sun.imageio.plugins.jpeg.JPEGImageReader;
import com.sun.imageio.plugins.png.PNGImageReader;
/**
* @author Erick Kong
* @see ImageUtil.java
* @createDate: 2007-6-22
* @version 1.0
*/
public class ImageUtil {

public static final String TYPE_GIF = "gif";
public static final String TYPE_JPEG = "jpeg";
public static final String TYPE_PNG = "png";
public static final String TYPE_BMP = "bmp";
public static final String TYPE_NOT_AVAILABLE = "na";
private static ColorModel getColorModel(Image image)
    throws InterruptedException, IllegalArgumentException {
   PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);
   if (!pg.grabPixels())
    throw new IllegalArgumentException();
   return pg.getColorModel();
}
private static void loadImage(Image image) throws InterruptedException,
    IllegalArgumentException {
   Component dummy = new Component() {
    private static final long serialVersionUID = 1L;
   };
   MediaTracker tracker = new MediaTracker(dummy);
   tracker.addImage(image, 0);
   tracker.waitForID(0);
   if (tracker.isErrorID(0))
    throw new IllegalArgumentException();
}
public static BufferedImage createBufferedImage(Image image)
    throws InterruptedException, IllegalArgumentException {
   loadImage(image);
   int w = image.getWidth(null);
   int h = image.getHeight(null);
   ColorModel cm = getColorModel(image);
   GraphicsEnvironment ge = GraphicsEnvironment
     .getLocalGraphicsEnvironment();
   GraphicsDevice gd = ge.getDefaultScreenDevice();
   GraphicsConfiguration gc = gd.getDefaultConfiguration();
   BufferedImage bi = gc.createCompatibleImage(w, h, cm.getTransparency());
   Graphics2D g = bi.createGraphics();
   g.drawImage(image, 0, 0, null);
   g.dispose();
   return bi;
}
public static BufferedImage readImage(InputStream is) {
   BufferedImage image = null;
   try {
    image = ImageIO.read(is);
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   return image;
}

public static BufferedImage readImage(byte[] imageByte) {
   ByteArrayInputStream bais = new ByteArrayInputStream(imageByte);
   BufferedImage image = readImage(bais);
   return image;
}
public static void encodeGIF(BufferedImage image, OutputStream out)
    throws IOException {
   Gif89Encoder encoder = new Gif89Encoder(image);
   encoder.encode(out);
}
/**

* @param bi
* @param type
* @param out
*/
public static void printImage(BufferedImage bi, String type,
    OutputStream out) {
   try {
    if (type.equals(TYPE_GIF))
     encodeGIF(bi, out);
    else
     ImageIO.write(bi, type, out);
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
}
/**
* Get image type from byte[]

* @param textObj
*            image byte[]
* @return String image type
*/
public static String getImageType(byte[] textObj) {
   String type = TYPE_NOT_AVAILABLE;
   ByteArrayInputStream bais = null;
   MemoryCacheImageInputStream mcis = null;
   try {
    bais = new ByteArrayInputStream(textObj);
    mcis = new MemoryCacheImageInputStream(bais);
    Iterator itr = ImageIO.getImageReaders(mcis);
    while (itr.hasNext()) {
     ImageReader reader = (ImageReader) itr.next();
     if (reader instanceof GIFImageReader) {
      type = TYPE_GIF;
     } else if (reader instanceof JPEGImageReader) {
      type = TYPE_JPEG;
     } else if (reader instanceof PNGImageReader) {
      type = TYPE_PNG;
     } else if (reader instanceof BMPImageReader) {
      type = TYPE_BMP;
     }
     reader.dispose();
    }
   } finally {
    if (bais != null) {
     try {
      bais.close();
     } catch (IOException ioe) {
      if (_log.isWarnEnabled()) {
       _log.warn(ioe);
      }
     }
    }
    if (mcis != null) {
     try {
      mcis.close();
     } catch (IOException ioe) {
      if (_log.isWarnEnabled()) {
       _log.warn(ioe);
      }
     }
    }
   }
   if (_log.isDebugEnabled()) {
    _log.debug("Detected type " + type);
   }
   return type;
}
private static Log _log = LogFactory.getLog(ImageUtil.class);
}
注意:对gif格式的图片进行处理的时候,需要另外一下jar包:gif89.jar,因为gif格式的图片不能使用ImageIO进行输出。
  如需将图片存放到数据库中,只需要修改红色部分,将图片以blob格式保存到数据库中,显示时以byte[]格式读出,使用ImageUtil.printImage()进行输出。
分享到:
评论

相关推荐

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

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

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

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

    Jsp中显示本地图片预览

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

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

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

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

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

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

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

    jsp 图片上传立即显示

    在JavaServer Pages (JSP) 中实现图片上传并立即显示是一项常见的需求,尤其在Web开发中,例如用户头像上传、商品图片展示等场景。这个功能涉及到文件上传、图像处理和动态网页显示等多个技术环节。以下将详细讲解...

    jsp上传图片预览

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

    jsp上传图片到数据库

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

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

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

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

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

    jsp 批量上传文件图片

    本篇将详细讲解如何利用SmartUpload组件在JSP中实现批量上传图片的功能。 首先,SmartUpload是Java的一个开源组件,专门用于处理文件上传,它简化了文件上传的复杂性,提供了易用的API,支持单个文件上传和批量文件...

    FCKEDITOR JSP 上传图片

    JSP作为Java的一种视图技术,可以方便地与FCKeditor结合,处理图片的上传、存储和显示。 1. **配置FCKeditor**: - **安装FCKeditor**:下载FCKeditor的最新版本,解压到项目目录下的适当位置。 - **引入...

    jsp+servlet 图片上传

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

    JSP上传图片并裁切及放大显示.rar

    JSP上传图片并裁切及放大显示,常用的JSP程序,看到有不少的图片上传、缩放及裁切程序,手痒就写了个,网上见的多的都是ASP/ASP.NET、php的,还没有发现有JSP的,写时候参数程序比较少,因此程序并不完善,只是实现...

    jsp ueditor 上传图片

    【标题】"jsp ueditor 上传图片"涉及的是在Java Web开发中使用UEditor这款富文本编辑器进行图片上传的功能实现。UEditor是一款强大的在线文本编辑器,它提供了丰富的编辑功能,包括插入图片、视频、链接等。在JSP...

    jsp显示数据库图片

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

    jsp中上传图片

    - 一旦图片上传成功,可以在JSP页面上显示图片,可以通过JavaScript或者JSP标签库(如JSTL)来实现。 以上就是使用JSP进行图片上传的基本步骤和关键知识点,需要注意的是,实际开发中还涉及到异常处理、错误提示、...

    jsp 图片上传 简单实例

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

    ueditor jsp 图片上传demo

    【标题】"ueditor jsp 图片上传demo"是一个基于Ueditor编辑器的Java Web应用程序示例,展示了如何在jsp页面上实现图片上传功能。Ueditor是一款强大的富文本编辑器,广泛应用于网页内容编辑,支持多种语言,包括...

Global site tag (gtag.js) - Google Analytics