- 上传准备
需要在web文件夹下面创建一个userFile文件夹用来存放图片,这里有一个问题,userFile文件夹不能为空!!否则IDEA无法部署到out文件夹里,之后运行项目的话会出现找不到路径的问题,这个有点坑,可以在里面随便创个文件,我这里是创建的是a.txt。
- 工具类封装-FileUploadUtil
注意,工具类中的方法,传入参的参数是request和response,返回的是图片名字,图片的名字是用UUID拼接的,防止重复。里面的跳转路径可自行修改。
public class FileUploadUtil {
public static String imgFile(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 准备上传
PrintWriter out = response.getWriter();
// 请求信息中的内容是否是multipart类型
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
// 获取到服务器项目的根目录下的userFile目录
String uploadFilePath = request.getServletContext().getRealPath("/userFile");
//判断请求信息中的内容 是否是“multipart/form-data”类型
if (isMultipart) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//设置上传文件大小:单位 byte
upload.setSizeMax(1024 * 1024 * 4);
try {
// 解析form表单中所有文件
List items = upload.parseRequest(request);
for (FileItem item : items) {
// 普通表单字段true, 文件表单字段false
if (!item.isFormField()) {
//文件名
String fileName = item.getName();
if (fileName != null && !"".equals(fileName)) {
String s = fileName.substring(fileName.lastIndexOf('.') + 1);
if (!"jpg".equals(s) && !"gif".equals(s) && !"bmp".equals(s) && !"png".equals(s) && !"txt".equals(s)) {
// 跳转路径
out.print("");
} else {
// 处理文件同名的问题,在文件名前添加UUID
String uuid = UUID.randomUUID().toString();
File saveFile = new File(uploadFilePath + "/" + uuid + "_" + fileName);
//上传
item.write(saveFile);
// 文件名
String homeImg = uuid + "_" + fileName;
return homeImg;
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
out.print("");
}
}
return null;
}
}
- servlet中使用该方法
直接调动即可,返回图片名称。
// 上传图片 返回图片名
String homeImg = FileUploadUtil.imgFile(request, response);
- 运行效果
运行项目时IDEA会把userFile文件夹(再说一遍userFile文件夹不能为空!!!)部署到out中文件夹,调用上传图片方法时,图片是直接上传到out 文件夹下的,可用于表示层前端页面显示。