利用fileupload组件进行文件上传
依赖的包: commons-fileupload-1.2.1.jar
UploadServlet.java
1package robert.stock.web.servlet;
2
3import java.io.File;
4import java.io.FileOutputStream;
5import java.io.IOException;
6import java.io.InputStream;
7import java.io.OutputStream;
8import java.io.PrintWriter;
9import java.util.HashMap;
10import java.util.Map;
11
12import javax.servlet.ServletException;
13import javax.servlet.http.HttpServlet;
14import javax.servlet.http.HttpServletRequest;
15import javax.servlet.http.HttpServletResponse;
16
17import org.apache.commons.fileupload.FileItemIterator;
18import org.apache.commons.fileupload.FileItemStream;
19import org.apache.commons.fileupload.FileUploadException;
20import org.apache.commons.fileupload.disk.DiskFileItemFactory;
21import org.apache.commons.fileupload.servlet.ServletFileUpload;
22import org.apache.commons.fileupload.util.Streams;
23import org.apache.log4j.Logger;
24
25import robert.stock.common.FileOperation;
26
27/** *//**
28 * Upload Servlet:文件上传专用
29 * @author Robert Lai
30 *
31 */
32public class UploadServlet extends HttpServlet {
33
34private static final long serialVersionUID = 1L;
35
36 private static Logger logger=Logger.getLogger(UploadServlet.class);
37
38 private Map<String,String> initParameters;
39 private DiskFileItemFactory itemFactory;
40
41 @Override
42 public void init() throws ServletException {
43 initParameters=new HashMap<String,String>();
44
45 //Temporal directory
46 String directory=super.getInitParameter("temporal-directory");
47 if(directory==null||"".equals(directory.trim())){
48 logger.error("Please initialize temporal directory.");
49 return;
50 }
51 directory=super.getServletContext().getRealPath(directory).replaceAll("\\\\", "/")+"/";
52 initParameters.put("temporal-directory",directory);
53 File targetFile=new File(directory);
54 boolean isOK=false;
55 if(!targetFile.exists()){
56 isOK=targetFile.mkdirs();
57 if(!isOK){
58 logger.error("Cannot create temporal directory.");
59 return;
60 }
61 }
62 //Set factory
63 itemFactory=new DiskFileItemFactory();
64 itemFactory.setRepository(new File(initParameters.get("temporal-directory")));
65 //itemFactory.setRepository(new File(directory));
66 itemFactory.setSizeThreshold(1024*1024);
67
68 //File directory
69 directory=super.getInitParameter("file-directory");
70 if(directory!=null&&!"".equals(directory.trim())){
71 initParameters.put("file-context",directory.toLowerCase());
72 //Change separator
73 directory=super.getServletContext().getRealPath(directory.toLowerCase()).replaceAll("\\\\", "/")+"/";
74 initParameters.put("file-directory",directory);
75 targetFile=new File(directory);
76 isOK=false;
77 if(!targetFile.exists()){
78 isOK=targetFile.mkdirs();
79 if(!isOK){
80 logger.error("Cannot create file directory.");
81 }
82 }
83 }else{
84 if(logger.isInfoEnabled()){
85 logger.info("Donot initialize file directory");
86 }
87 }
88
89 //Image directory
90 directory=super.getInitParameter("image-directory");
91 if(directory!=null&&!"".equals(directory.trim())){
92 initParameters.put("image-context",directory.toLowerCase());
93 //Change separator
94 directory=super.getServletContext().getRealPath(directory.toLowerCase()).replaceAll("\\\\", "/")+"/";
95 initParameters.put("image-directory",directory);
96 targetFile=new File(directory);
97 isOK=false;
98 if(!targetFile.exists()){
99 isOK=targetFile.mkdirs();
100 if(!isOK){
101 logger.error("Cannot create image directory.");
102 }
103 }
104 }else{
105 if(logger.isInfoEnabled()){
106 logger.info("Donot initialize image directory");
107 }
108 }
109
110 if(logger.isInfoEnabled()){
111 logger.info("Temporal directory:["+initParameters.get("temporal-directory")+"],Size threshold:["+(1024*1024)+"],File directory:["+initParameters.get("file-directory")+"],Image directory:["+initParameters.get("image-directory")+"]");
112 }
113 }
114
115 @Override
116 public void destroy() {
117 }
118
119 @Override
120 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
121 if("POST".equals(request.getMethod())){
122 request.setCharacterEncoding("UTF-8");
123 }
124 String mode=request.getParameter("mode");
125 if("uploadbasic".equals(mode)){
126 uploadBasic(request,response);
127 }
128 }
129
130 /** *//**
131 * Upload basic:上传基础库存
132 */
133 private void uploadBasic(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
134 response.setCharacterEncoding("UTF-8");
135 PrintWriter out=response.getWriter();
136
137 ServletFileUpload fileUpload=new ServletFileUpload(this.itemFactory);
138
139 FileItemIterator iterator=null;
140 try {
141 iterator=fileUpload.getItemIterator(request);
142 } catch (FileUploadException e) {
143 e.printStackTrace();
144 return;
145 }
146
147 Map<String,String> data=new HashMap<String,String>();
148 try {
149 while(iterator.hasNext()){
150 FileItemStream item=iterator.next();
151 String fieldName=item.getFieldName();
152 InputStream input=item.openStream();
153 if(item.isFormField()){
154 String fieldValue=Streams.asString(input, "UTF-8");
155 data.put(fieldName,fieldValue);
156 System.out.println(fieldName+":"+fieldValue);
157 }else{
158 String fileName=item.getName();
159 OutputStream output=new FileOutputStream(this.initParameters.get("file-directory")+fileName);
160 Streams.copy(input, output,true,new byte[1024*1024]);
161 data.put("file-name",fileName);
162 }
163 }
164 } catch (FileUploadException e) {
165 e.printStackTrace();
166 logger.error("fileupload exception");
167 }
168 //use data
169 FileOperation.importBasicStock(this.initParameters.get("file-directory")+data.get("file-name"), data.get("title"));
170 out.println("{state:true,msg:\"文件上传成功,开始导入操作~\"}");
171 out.close();
172 }
173}
174
1package robert.stock.web.servlet;
2
3import java.io.File;
4import java.io.FileOutputStream;
5import java.io.IOException;
6import java.io.InputStream;
7import java.io.OutputStream;
8import java.io.PrintWriter;
9import java.util.HashMap;
10import java.util.Map;
11
12import javax.servlet.ServletException;
13import javax.servlet.http.HttpServlet;
14import javax.servlet.http.HttpServletRequest;
15import javax.servlet.http.HttpServletResponse;
16
17import org.apache.commons.fileupload.FileItemIterator;
18import org.apache.commons.fileupload.FileItemStream;
19import org.apache.commons.fileupload.FileUploadException;
20import org.apache.commons.fileupload.disk.DiskFileItemFactory;
21import org.apache.commons.fileupload.servlet.ServletFileUpload;
22import org.apache.commons.fileupload.util.Streams;
23import org.apache.log4j.Logger;
24
25import robert.stock.common.FileOperation;
26
27/** *//**
28 * Upload Servlet:文件上传专用
29 * @author Robert Lai
30 *
31 */
32public class UploadServlet extends HttpServlet {
33
34private static final long serialVersionUID = 1L;
35
36 private static Logger logger=Logger.getLogger(UploadServlet.class);
37
38 private Map<String,String> initParameters;
39 private DiskFileItemFactory itemFactory;
40
41 @Override
42 public void init() throws ServletException {
43 initParameters=new HashMap<String,String>();
44
45 //Temporal directory
46 String directory=super.getInitParameter("temporal-directory");
47 if(directory==null||"".equals(directory.trim())){
48 logger.error("Please initialize temporal directory.");
49 return;
50 }
51 directory=super.getServletContext().getRealPath(directory).replaceAll("\\\\", "/")+"/";
52 initParameters.put("temporal-directory",directory);
53 File targetFile=new File(directory);
54 boolean isOK=false;
55 if(!targetFile.exists()){
56 isOK=targetFile.mkdirs();
57 if(!isOK){
58 logger.error("Cannot create temporal directory.");
59 return;
60 }
61 }
62 //Set factory
63 itemFactory=new DiskFileItemFactory();
64 itemFactory.setRepository(new File(initParameters.get("temporal-directory")));
65 //itemFactory.setRepository(new File(directory));
66 itemFactory.setSizeThreshold(1024*1024);
67
68 //File directory
69 directory=super.getInitParameter("file-directory");
70 if(directory!=null&&!"".equals(directory.trim())){
71 initParameters.put("file-context",directory.toLowerCase());
72 //Change separator
73 directory=super.getServletContext().getRealPath(directory.toLowerCase()).replaceAll("\\\\", "/")+"/";
74 initParameters.put("file-directory",directory);
75 targetFile=new File(directory);
76 isOK=false;
77 if(!targetFile.exists()){
78 isOK=targetFile.mkdirs();
79 if(!isOK){
80 logger.error("Cannot create file directory.");
81 }
82 }
83 }else{
84 if(logger.isInfoEnabled()){
85 logger.info("Donot initialize file directory");
86 }
87 }
88
89 //Image directory
90 directory=super.getInitParameter("image-directory");
91 if(directory!=null&&!"".equals(directory.trim())){
92 initParameters.put("image-context",directory.toLowerCase());
93 //Change separator
94 directory=super.getServletContext().getRealPath(directory.toLowerCase()).replaceAll("\\\\", "/")+"/";
95 initParameters.put("image-directory",directory);
96 targetFile=new File(directory);
97 isOK=false;
98 if(!targetFile.exists()){
99 isOK=targetFile.mkdirs();
100 if(!isOK){
101 logger.error("Cannot create image directory.");
102 }
103 }
104 }else{
105 if(logger.isInfoEnabled()){
106 logger.info("Donot initialize image directory");
107 }
108 }
109
110 if(logger.isInfoEnabled()){
111 logger.info("Temporal directory:["+initParameters.get("temporal-directory")+"],Size threshold:["+(1024*1024)+"],File directory:["+initParameters.get("file-directory")+"],Image directory:["+initParameters.get("image-directory")+"]");
112 }
113 }
114
115 @Override
116 public void destroy() {
117 }
118
119 @Override
120 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
121 if("POST".equals(request.getMethod())){
122 request.setCharacterEncoding("UTF-8");
123 }
124 String mode=request.getParameter("mode");
125 if("uploadbasic".equals(mode)){
126 uploadBasic(request,response);
127 }
128 }
129
130 /** *//**
131 * Upload basic:上传基础库存
132 */
133 private void uploadBasic(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
134 response.setCharacterEncoding("UTF-8");
135 PrintWriter out=response.getWriter();
136
137 ServletFileUpload fileUpload=new ServletFileUpload(this.itemFactory);
138
139 FileItemIterator iterator=null;
140 try {
141 iterator=fileUpload.getItemIterator(request);
142 } catch (FileUploadException e) {
143 e.printStackTrace();
144 return;
145 }
146
147 Map<String,String> data=new HashMap<String,String>();
148 try {
149 while(iterator.hasNext()){
150 FileItemStream item=iterator.next();
151 String fieldName=item.getFieldName();
152 InputStream input=item.openStream();
153 if(item.isFormField()){
154 String fieldValue=Streams.asString(input, "UTF-8");
155 data.put(fieldName,fieldValue);
156 System.out.println(fieldName+":"+fieldValue);
157 }else{
158 String fileName=item.getName();
159 OutputStream output=new FileOutputStream(this.initParameters.get("file-directory")+fileName);
160 Streams.copy(input, output,true,new byte[1024*1024]);
161 data.put("file-name",fileName);
162 }
163 }
164 } catch (FileUploadException e) {
165 e.printStackTrace();
166 logger.error("fileupload exception");
167 }
168 //use data
169 FileOperation.importBasicStock(this.initParameters.get("file-directory")+data.get("file-name"), data.get("title"));
170 out.println("{state:true,msg:\"文件上传成功,开始导入操作~\"}");
171 out.close();
172 }
173}
174
web.xml文件配置:
web.xml
1<!-- Upload -->
2 <servlet>
3 <servlet-name>Upload</servlet-name>
4 <servlet-class>robert.stock.web.servlet.UploadServlet</servlet-class>
5 <init-param>
6 <param-name>temporal-directory</param-name>
7 <param-value>/upload/temporal/</param-value>
8 </init-param>
9 <init-param>
10 <param-name>file-directory</param-name>
11 <param-value>/upload/file/</param-value>
12 </init-param>
13 <init-param>
14 <param-name>image-directory</param-name>
15 <param-value>/upload/image/</param-value>
16 </init-param>
17 </servlet>
18 <servlet-mapping>
19 <servlet-name>Upload</servlet-name>
20 <url-pattern>/upload.rhtml</url-pattern>
21 </servlet-mapping>
1<!-- Upload -->
2 <servlet>
3 <servlet-name>Upload</servlet-name>
4 <servlet-class>robert.stock.web.servlet.UploadServlet</servlet-class>
5 <init-param>
6 <param-name>temporal-directory</param-name>
7 <param-value>/upload/temporal/</param-value>
8 </init-param>
9 <init-param>
10 <param-name>file-directory</param-name>
11 <param-value>/upload/file/</param-value>
12 </init-param>
13 <init-param>
14 <param-name>image-directory</param-name>
15 <param-value>/upload/image/</param-value>
16 </init-param>
17 </servlet>
18 <servlet-mapping>
19 <servlet-name>Upload</servlet-name>
20 <url-pattern>/upload.rhtml</url-pattern>
21 </servlet-mapping>