Rumah > php教程 > PHP开发 > 用fileupload组件实现的大文件上传简单实例

用fileupload组件实现的大文件上传简单实例

高洛峰
Lepaskan: 2016-12-29 17:00:15
asal
1730 orang telah melayarinya

1.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

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

import java.io.File;

import java.io.IOException;

import java.io.PrintWriter;

import java.text.DecimalFormat;

import java.util.Iterator;

import java.util.List;

  

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.FileUploadBase.SizeLimitExceededException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

  

public class FileUploadServlet extends HttpServlet

{

 private static final long serialVersionUID = 1L;

  

 public FileUploadServlet()

 {

 super();

 }

  

 protected void doGet(HttpServletRequest request,

 HttpServletResponse response) throws ServletException, IOException

 {

 this.doPost(request, response);

 }

  

 protected void doPost(HttpServletRequest request,

 HttpServletResponse response) throws ServletException, IOException

 {

  

 final long MAX_SIZE = 2048 * 1024 * 1024;// 设置上传文件最大值为2G,可以改为更大

 // 允许上传的文件格式的列表

 final String[] allowedExt = new String[]

 { "exe","jpg","DT" };

 response.setContentType("text/html");

 // 设置字符编码为UTF-8, 统一编码,处理出现乱码问题

 response.setCharacterEncoding("UTF-8");

  

 // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload

 DiskFileItemFactory dfif = new DiskFileItemFactory();

  

 // 用以上工厂实例化上传组件

 ServletFileUpload sfu = new ServletFileUpload(dfif);

 // 设置最大上传大小

 sfu.setSizeMax(MAX_SIZE);

  

 PrintWriter out = response.getWriter();

 // 从request得到所有上传域的列表

 List fileList = null;

 try

 {

 fileList = sfu.parseRequest(request);

 } catch (FileUploadException e)

 {// 处理文件尺寸过大异常

 if (e instanceof SizeLimitExceededException)

 {

 out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");

 out.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");

 return;

 }

 e.printStackTrace();

 }

 // 没有文件上传

 if (fileList == null || fileList.size() == 0)

 {

 out.println("请选择上传文件<p />");

 out.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");

 return;

 }

 //文件大小取两位小数

 DecimalFormat digit=new DecimalFormat("0.00");

 // 得到所有上传的文件

 Iterator fileItr = fileList.iterator();

 // 循环处理所有文件

 while (fileItr.hasNext())

 {

 FileItem fileItem = null;

 String path = null;

 double size = 0;

 // 得到当前文件

 fileItem = (FileItem) fileItr.next();

 // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)

 if (fileItem == null || fileItem.isFormField())

 {

 continue;

 }

  

 // 得到文件的大小,K为单位并保留两位小数

 size = (double)fileItem.getSize()/1024;

 if ("".equals(path) || size == 0)

 {

 out.println("<html><head><title>上传处理界面</title></head>");

 out.println("请选择上传文件<p />");

 out.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");

 out.println("</html>");

 return;

 }

 // 得到文件的完整路径

 path = fileItem.getName();

    

 // 得到去除路径的文件名

 String t_name = path.substring(path.lastIndexOf("\\") + 1);

 // 得到文件的扩展名(无扩展名时将得到全名)

 String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);

 // 拒绝接受规定文件格式之外的文件类型

 int allowFlag = 0;

 int allowedExtCount = allowedExt.length;

 for (; allowFlag < allowedExtCount; allowFlag++)

 {

 if (allowedExt[allowFlag].equals(t_ext))

 break;

 }

 if (allowFlag == allowedExtCount)

 {

 out.println("<html><head><title>上传处理界面</title></head>");

 out.println("请上传以下类型的文件<p />");

 for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)

 out.println("*." + allowedExt[allowFlag]

 + "   ");

 out.println("<p /><a href=\"FileUpload.html\" target=\"_top\">返回</a>");

 out.println("</html>");

 return;

 }

 try

 {

 // 保存文件到服务器根目录下

 fileItem.write(new File("\\"+t_name));

 System.out.println(t_name);

 out.println("<html><head><title>上传处理界面</title></head>");

 out.println("文件名称为:" + path + "<br>");

 out.println("文件上传成功, 已保存为: " + t_name

 + "<br>"+" 文件大小: " + digit.format(size) + "K <p />");

 out.println("<a href=\"FileUpload.html\" target=\"_top\">继续上传</a>");

 out.println("</html>");

 } catch (Exception e)

 {

 e.printStackTrace();

 }

 }

 }

}

Salin selepas log masuk

2.FileUpload.html文件,实现上传页面。

1

2

3

4

5

6

7

8

9

10

11

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>文件上传</title>

</head>

<body>

<form action="FileUploadServlet" method="post"

enctype="multipart/form-data">

<input type="file" size="30"

name="file01" /><br>

<pre class="brush:php;toolbar:false"> <input name="submit" type="submit" value="上传"> <input name="reset" type="reset" value="重置">

Salin selepas log masuk

3.配置web.xml文件中的的servlet和过滤器,过滤器解决上传文件名为中文时出现乱码。

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

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>

<display-name>FileUploadServlet</display-name>

<servlet-name>FileUploadServlet</servlet-name>

<servlet-class>FileUploadServlet</servlet-class>

</servlet>

  

<servlet-mapping>

<servlet-name>FileUploadServlet</servlet-name>

<url-pattern>/FileUploadServlet</url-pattern>

</servlet-mapping>

  

<filter>

<filter-name>setCharacterEncoding </filter-name>

<filter-class>com.xulu.EncodingChange</filter-class>

<init-param>

<param-name>ignore </param-name>

<param-value>true </param-value>

</init-param>

  

<init-param>

<param-name>encoding </param-name>

<param-value>UTF-8 </param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>setCharacterEncoding </filter-name>

<url-pattern>/* </url-pattern>

</filter-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<login-config>

<auth-method>BASIC</auth-method>

</login-config>

</web-app>

Salin selepas log masuk

4.过滤器文件EncodingChange.java和setCharacterEncoding.java分别如下,并且在根目录下的WEB-INF\classes\com\xulu文件夹中放入他它们编译生成的.class文件

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

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

package com.xulu;

  

import java.io.IOException;

  

import javax.servlet.*;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

  

public class EncodingChange implements Filter

{

 protected String encoding = null;

 protected FilterConfig filterconfig = null;

 protected boolean ignore = true;

  

 public void destroy()

 {

 this.encoding = null;

 this.filterconfig = null;

 }

  

 public void doFilter(ServletRequest requests, ServletResponse responses,

 FilterChain chain) throws IOException, ServletException

 {

 // TODO Auto-generated method stub

 HttpServletRequest request = (HttpServletRequest) requests;

 HttpServletResponse response = (HttpServletResponse) responses;

 if (ignore || request.getCharacterEncoding() == null)

 {

 String encoding = selectEncoding(request);

 if (encoding != null)

 {

 request.setCharacterEncoding(encoding);

 request.getSession().getAttribute("Login_Student");

 request.getSession().getAttribute("Login_Teacher");

 request.getSession().getAttribute("Login_Admin");

 }

 }

 chain.doFilter(request, response);

 }

  

 public void init(FilterConfig filterconfig) throws ServletException

 {

 // TODO Auto-generated method stub

 this.filterconfig = filterconfig;

 this.encoding = filterconfig.getInitParameter("encoding");

 String value = filterconfig.getInitParameter("ignore");

 if (value == null)

 {

 this.ignore = true;

 } else if (value.equalsIgnoreCase("true"))

 {

 this.ignore = true;

 } else if (value.equalsIgnoreCase("yes"))

 {

 this.ignore = true;

 } else

 {

 this.ignore = false;

 }

 }

  

 public String selectEncoding(ServletRequest request)

 {

 return this.encoding;

 }

}

package com.xulu;

  

import java.io.IOException;

  

import javax.servlet.*;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

  

public class setCharacterEncoding implements Filter{

protected String encoding=null;

protected FilterConfig filterconfig=null;

protected boolean ignore=true;

  

  

public void destroy() {

this.encoding=null;

this.filterconfig=null;

}

  

public void doFilter(ServletRequest requests, ServletResponse responses,

FilterChain chain) throws IOException, ServletException {

// TODO Auto-generated method stub

HttpServletRequest request=(HttpServletRequest)requests;

HttpServletResponse response=(HttpServletResponse)responses;

if(ignore||request.getCharacterEncoding()==null){

String encoding=selectEncoding(request);

if(encoding!=null){

request.setCharacterEncoding(encoding);

request.getSession().getAttribute("Login_Student");

request.getSession().getAttribute("Login_Teacher");

request.getSession().getAttribute("Login_Admin");

}

}

chain.doFilter(request, response);

}

  

public void init(FilterConfig filterconfig) throws ServletException {

// TODO Auto-generated method stub

this.filterconfig = filterconfig;

this.encoding = filterconfig.getInitParameter("encoding");

String value = filterconfig.getInitParameter("ignore");

if (value == null) {

this.ignore = true;

} else if (value.equalsIgnoreCase("true")) {

this.ignore = true;

} else if (value.equalsIgnoreCase("yes")) {

this.ignore = true;

} else {

this.ignore = false;

}

}

public String selectEncoding(ServletRequest request){

return this.encoding;

}

}

Salin selepas log masuk

5.在浏览器中就可以实现页面的上传了,访问http://localhost:8080/**/FileUpload.html就可以了。其中**为自己命名的web文件夹,如DoUpload,上面的文件都在该目录里,且DoUpload文件夹放在Tomcat的webapp文件夹下。

补充:在上述所有步骤之前需引入三个.jar文件,分别为commons-fileupload-1.2.1.jar,commons-io-1.4.jar和servlet-api.jar网上可以下载到

以上就是小编为大家带来的用fileupload组件实现的大文件上传简单实例的全部内容了,希望对大家有所帮助,多多支持PHP中文网~

更多用fileupload组件实现的大文件上传简单实例相关文章请关注PHP中文网!


Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Isu terkini
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan