J2EE:servlet 上传文件到服务器,并响应显示

来源:互联网 发布:淘宝没有耐克旗舰店吗 编辑:程序博客网 时间:2024/05/19 03:30

Servlet 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。

编写上传页面upload.html

注意事项:
表单 method 属性应该设置为 POST 方法,不能使用 GET 方法。(GET属方法不能上传文件)
表单 enctype 属性应该设置为 multipart/form-data.(表示提交的数据是二进制文件)

<form action="/uploadPhoto" method="post" enctype="multipart/form-data">

upload.html

<!DOCTYPE html><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><form action="/uploadPhoto" method="post" enctype="multipart/form-data">  英雄名称:<input type="text" name="heroName" /> <br>   上传头像 : <input type="file" name="filepath" /> <br>   <input type="submit" value="上传"></for

servlet类—上传功能开发

将commons-io-1.4.jar和commons-fileupload-1.2.2.jar 两个jar包放到WEB-INF/lib 目录下。

读取输入流中的数据,保存在服务端的目录下 e:/project/j2ee/web/uploaded,因为后续网页上显示的时候是通过http://127.0.0.1/uploaded/xxx.jpg 路径来查找图片。

根据临时生成的文件名,创建一个html img元素,然后通过response返回浏览器

UploadPhotoServlet

import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStream;import java.io.PrintWriter;import java.util.Iterator;import java.util.List;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;/** * servlet文件上传到服务器以及响应显示 * @author lzp * */public class UploadPhotoServlet extends HttpServlet {    public void doPost(HttpServletRequest request, HttpServletResponse response) {        String filename = null;        try {            DiskFileItemFactory factory = new DiskFileItemFactory();            ServletFileUpload upload = new ServletFileUpload(factory);            // 设置上传文件的大小限制为1M            factory.setSizeThreshold(1024 * 1024);            List items = null;            try {                items = upload.parseRequest(request);            } catch (FileUploadException e) {                e.printStackTrace();            }            Iterator iter = items.iterator();            while (iter.hasNext()) {                FileItem item = (FileItem) iter.next();                // 判断是常规字段还是提交的文件(常规字段为true)                if (!item.isFormField()) {  // 提交文件                    // 根据时间戳创建头像文件                    filename = System.currentTimeMillis() + ".jpg";                    String photoFolder = "e:\\project\\j2ee\\web\\uploaded";                    File f = new File(photoFolder, filename);                    f.getParentFile().mkdir();  // 上级目录的创建 mkdirs使用值得商榷                    // 通过item.getInputStream()获取浏览器上传的文件的输入流                    InputStream is = item.getInputStream();                    // 复制文件---字节流复制                    FileOutputStream fos = new FileOutputStream(f);                    byte b[] = new byte[1024 * 1024];                    int length = 0;                    while (-1 != (length = is.read(b))) {                        fos.write(b, 0, length);                    }                    fos.close();                } else {    // 常规字段                    System.out.println(item.getFieldName()); // 字段                    String value = item.getString();         // 字段值                    value = new String(value.getBytes("ISO-8859-1"), "UTF-8");                    System.out.println(value);                   }            }            String html = "<img width='200' height='150' src='uploaded/%s' />";            PrintWriter pw= response.getWriter();            pw.format(html, filename);            response.setContentType("text/html");        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (Exception e) {            e.printStackTrace();        }    }}

web.xml—路径映射

将web.xml提供的路径映射到对应的servlet上。

<?xml version="1.0" encoding="UTF-8"?><web-app>    <servlet>        <servlet-name>UploadPhotoServlet</servlet-name>        <servlet-class>UploadPhotoServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>UploadPhotoServlet</servlet-name>        <url-pattern>/uploadPhoto</url-pattern>    </servlet-mapping></web-app>

运行结果

这里写图片描述

0 0
原创粉丝点击