jsp页面
<form action="/0809/fileuplaod2" method="post" enctype="multipart/form-data">
上传文件:<input type="file" name="file1" value="上传文件"><br>
<input type="submit" value="提交">
</form>
=================================================================
servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//解析
try {
List<FileItem> items = upload.parseRequest(request); //解析所有上传数据
for (FileItem item : items) {
if(item.isFormField()){
//false为上传文件项目
}else{
String name = item.getName();
String realName = UploadUtils.getRealName(name);
String uuidName = UploadUtils.getUUIDName(realName);
String storePath = getServletContext().getRealPath("/WEB-INF/files"); //绝对路径
String path = UploadUtils.makeStorePath(storePath);
File file = new File(path);
if(!file.exists()){
file.mkdirs();
}
FileOutputStream fos = new FileOutputStream(new File(path,uuidName));
IOUtils.copy(item.getInputStream(), fos);
item.delete();
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
=================================================================================
工具类
public class UploadUtils {
/**
* 得到文件的真是名称,如果前面带路径,则给去掉
* @return
*/
public static String getRealName(String fileName){
String realName = fileName.substring(fileName.lastIndexOf("\\")+1);
return realName;
}
/**
* 生成随机名称,防止上传文件名称重复
* @param fileName
* @return
*/
public static String getUUIDName(String fileName){
int index = fileName.lastIndexOf(".");
if(index != -1){//有后缀名称
UUID id = UUID.randomUUID();
String UUIDName = id.toString()+fileName.substring(index);
return UUIDName;
}else{
UUID id = UUID.randomUUID();
return id.toString();
}
}
/**
* 根据日期生成目录 例如:2018/8/
* @param storePath
* @return
*/
public static String makeStorePath(String storePath) {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String s = sdf.format(date);
String[] split = s.split("-");
String p = "";
for (int i = 0; i < split.length; i++) {
if(i==split.length-1){
p+=split[i];
}else{
p+=split[i]+"\\";
}
}
String path = storePath+"\\"+p;
File file = new File(path);
if(!file.exists())
{
file.mkdirs();//创建多级目录,mkdir只创建一级目录
}
return path;
}
}