利用fileupload组件进行文件上传
依赖的包: commons-fileupload-1.2.1.jar
1
package robert.stock.web.servlet;2

3
import java.io.File;4
import java.io.FileOutputStream;5
import java.io.IOException;6
import java.io.InputStream;7
import java.io.OutputStream;8
import java.io.PrintWriter;9
import java.util.HashMap;10
import java.util.Map;11

12
import javax.servlet.ServletException;13
import javax.servlet.http.HttpServlet;14
import javax.servlet.http.HttpServletRequest;15
import javax.servlet.http.HttpServletResponse;16

17
import org.apache.commons.fileupload.FileItemIterator;18
import org.apache.commons.fileupload.FileItemStream;19
import org.apache.commons.fileupload.FileUploadException;20
import org.apache.commons.fileupload.disk.DiskFileItemFactory;21
import org.apache.commons.fileupload.servlet.ServletFileUpload;22
import org.apache.commons.fileupload.util.Streams;23
import org.apache.log4j.Logger;24

25
import robert.stock.common.FileOperation;26

27

/** *//**28
* Upload Servlet:文件上传专用29
* @author Robert Lai30
*31
*/32

public class UploadServlet extends HttpServlet
{33

34
private 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
@Override42

public void init() throws ServletException
{43
initParameters=new HashMap<String,String>();44
45
//Temporal directory46
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 factory63
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 directory69
directory=super.getInitParameter("file-directory");70

if(directory!=null&&!"".equals(directory.trim()))
{71
initParameters.put("file-context",directory.toLowerCase());72
//Change separator73
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 directory90
directory=super.getInitParameter("image-directory");91

if(directory!=null&&!"".equals(directory.trim()))
{92
initParameters.put("image-context",directory.toLowerCase());93
//Change separator94
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
@Override116

public void destroy()
{117
}118
119
@Override120

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 data169
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文件配置:
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>
浙公网安备 33010602011771号