J2EE:servlet 上传文件到服务器,并响应显示
2017-04-08 21:37
363 查看
Servlet 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。
表单 method 属性应该设置为 POST 方法,不能使用 GET 方法。(GET属方法不能上传文件)
表单 enctype 属性应该设置为 multipart/form-data.(表示提交的数据是二进制文件)
读取输入流中的数据,保存在服务端的目录下 e:/project/j2ee/web/uploaded,因为后续网页上显示的时候是通过http://127.0.0.1/uploaded/xxx.jpg 路径来查找图片。
根据临时生成的文件名,创建一个html img元素,然后通过response返回浏览器
编写上传页面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>
运行结果
相关文章推荐
- J2EE Servlet上传文件到服务器并相应显示功能的实现代码
- Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现)
- Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现)(转)
- java httpclient 上传文件 服务器 servlet 接收
- Iframe实现Ajax文件上传Servlet响应上传结果
- 简单实现的Servlet文件上传,并显示
- PHP上传文件到服务器 并显示
- MVC分层+JDBC+数据库+Servlet实现JSP文件上传和显示+模糊查询+分页
- Servlet上传文件并显示上传进度
- [转]JSP或servlet中(以及上传下载文件)中文乱码或不显示的解决方案
- servlet从服务器下载文件,是图片则显示,文档则下载(可配置)
- Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现)
- PHP上传文件到服务器 并显示
- android通过servlet上传文件到服务器
- 安卓端上传多文件与servlet服务器接收多文件
- J2EE之 高效的servlet文件上传
- Servlet实现文件上传到服务器(不用表单,直接用代码模拟表单提交)
- iOS上传图片文件到J2EE Servlet保存
- java基于servlet编写上传下载功能 类似文件服务器
- 以form表单上传文件,接口不响应,后台显示"file" does not contain '/'