在我们的web开发中,很多的时候都需要把本机的一些文件上传到web服务器上面去。
如:一个BBS系统,当用户使用这是系统的时候,能把本机的一些图片,文档上传到服务器上面去。然后其他用户可以去下载这些文件,那么这样的话,我们可以自己编程实现文件的上传
但是更好的方式是使用一些已有的组件帮助我们实现这种上传功能。
常用的上传组件:
Apache 的 Commons FileUpload
JavaZoom的UploadBean
jspSmartUpload
upload.jsp
代码;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<%@ page language="java" contentType="text/html; charset=UTF-8"%> < html > < head > < title >using commons Upload to upload file </ title > </ head > < style > * { font-family: "宋体"; font-size: 14px } </ style > < body > < p align = "center" > 请您选择需要上传的文件</ p > < form id = "form1" name = "form1" method = "post" action = "servlet/fileServlet" enctype = "multipart/form-data" > < table border = "0" align = "center" > < tr > < td >上传人:</ td > < td > < input name = "name" type = "text" id = "name" size = "20" ></ td > </ tr > < tr > < td >上传文件:</ td > < td >< input name = "file" type = "file" size = "20" ></ td > </ tr > < tr > < td ></ td >< td > < input type = "submit" name = "submit" value = "提交" > < input type = "reset" name = "reset" value = "重置" > </ td > </ tr > </ table > </ form > </ body > </ html > |
FileUploadServlet.java代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
/** * */ package com.b510.example; import java.io.File; import java.io.IOException; import java.util.*; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; 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; /** * * @author XHW * * @date 2011-7-26 * */ public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = -7744625344830285257L; private ServletContext sc; private String savePath; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void init(ServletConfig config) { // 在web.xml中设置的一个初始化参数 savePath = config.getInitParameter( "savePath" ); sc = config.getServletContext(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding( "UTF-8" ); DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); try { List items = upload.parseRequest(request); Iterator itr = items.iterator(); while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); if (item.isFormField()) { System.out.println( "表单参数名:" + item.getFieldName() + ",表单参数值:" + item.getString( "UTF-8" )); } else { if (item.getName() != null && !item.getName().equals( "" )) { System.out.println( "上传文件的大小:" + item.getSize()); System.out.println( "上传文件的类型:" + item.getContentType()); // item.getName()返回上传文件在客户端的完整路径名称 System.out.println( "上传文件的名称:" + item.getName()); File tempFile = new File(item.getName()); //上传文件的保存路径 File file = new File(sc.getRealPath( "/" ) + savePath, tempFile.getName()); item.write(file); request.setAttribute( "upload.message" , "上传文件成功!" ); } else { request.setAttribute( "upload.message" , "没有选择上传文件!" ); } } } } catch (FileUploadException e){ e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); request.setAttribute( "upload.message" , "上传文件失败!" ); } request.getRequestDispatcher( "/uploadResult.jsp" ).forward(request, response); } } |
uploadResult.jsp代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < html > < head > < title >uploadResult</ title > < meta http-equiv = "pragma" content = "no-cache" > < meta http-equiv = "cache-control" content = "no-cache" > < meta http-equiv = "expires" content = "0" > < meta http-equiv = "keywords" content = "keyword1,keyword2,keyword3" > < meta http-equiv = "description" content = "This is my page" > <!-- <link rel="stylesheet" type="text/css" href="styles.css" rel="external nofollow" > --> </ head > < body > ${requestScope['upload.message'] } < a href = "/upload/uploadFile.jsp" rel = "external nofollow" >上传文件</ a > </ body > </ html > |
web.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
< servlet > < description >This is the description of my J2EE component</ description > < display-name >This is the display name of my J2EE component</ display-name > < servlet-name >FileUploadServlet</ servlet-name > < servlet-class >com.b510.example.FileUploadServlet</ servlet-class > <!--设置初始化参数--> < init-param > < param-name >savePath</ param-name > < param-value >uploads</ param-value > </ init-param > </ servlet > < servlet-mapping > < servlet-name >FileUploadServlet</ servlet-name > < url-pattern >/servlet/fileServlet</ url-pattern > </ servlet-mapping > |