servlet实现图片的上传
我们通常说的上传图片,是将图片上传到服务器上面,本篇以tomcat为例,实现简单的本地图片上传服务器。
一、图片的上传需要引入两个jar包:
commons-fileupload-1.4.jar,下载地址:http://commons.apache.org/proper/commons-fileupload/;
commons-io-2.6.jar,下载地址:http://commons.apache.org/proper/commons-io/download_io.cgi;
二、视图层
enctype=“multipart/form-data”:表示表单提交的数据时二进制数据。
上传文件窗口的input type为“ file ”.
三、控制层
//设置编码为utf-8
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
FileItemFactory factory = new DiskFileItemFactory();
// 文件上传处理器
ServletFileUpload upload = new ServletFileUpload(factory);
// 解析请求信息
List items = null;
try {
items = upload.parseRequest(request);
}
catch (FileUploadException e) {
e.printStackTrace();
}
// 对请求信息进行判断
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// 信息为普通的格式
if (item.isFormField()) {
String fieldName = item.getFieldName();
String value = item.getString();
request.setAttribute(fieldName, value);
}
// 信息为文件格式
else {
String fileName = item.getName();//获得上传图片的名称
int index = fileName.lastIndexOf("\\");
fileName = fileName.substring(index + 1);
request.setAttribute("realFileName", fileName);
String basePath = request.getSession().getServletContext().getRealPath("/images");
System.out.println(basePath);//打印当前位置
File file = new File(basePath, fileName);
try {
item.write(file);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
图片上传之后,存放在tomcat的文件目录下,如:F:\apache-tomcat-9.0.16\wtpwebapps\srs\images
效果图:
(注:srs为项目名称)
上面已经完成了图片上传的基本功能,但是由于文件存放的名字相同,当上传上一张图片后,会把之前上传的图片覆盖掉,因此,我们需要将图片的名字更改成随机数的形式,保证文件名不一样。这里我采用的是在文件名称里面加上系统时间,具体做法如下:
Date now = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy_MM_dd_hh_ss_mm");
String pubtime = sf.format(now);
String fileName = pubtime+item.getName();