您的位置:首页 > 其它

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

2017-04-08 21:37 363 查看
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>


运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: