servlet实现图片上传工具类
package com.donleo.ssm.utils; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.List; /** * @author liangd * date 2020-11-24 18:25 * code 图片上传工具类 */ public class UploadUtils { public static String save(HttpServletRequest req, HttpServletResponse resp) { //保存图片的路径 String savePath = CommonPath.SAVE_PATH.getValue(); //图片前面的具体路径 String imgPath = CommonPath.IMG_PATH.getValue(); //new一个file类 File file = new File(savePath, imgPath); //判断文件夹是否存在,如果存在,是否是文件夹,否则创建文件夹 if (!file.exists() && !file.isDirectory()) { file.mkdirs(); } //返回地址 String fileUrl =""; try { //创建DiskFileItemFactory工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //创建一个文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); //设置编码格式 upload.setHeaderEncoding("UTF-8"); //判断提交的数据是否是表单上的数据,multpart/form-data,如果不是,返回空字符串 if (!ServletFileUpload.isMultipartContent(req)) { } //使用ServletFileUpload解析表单数据,返回的是List<FileItem>集合,需要进行遍历 //将上传的数据强制转换为FileItem类型 List<FileItem> list = upload.parseRequest(req); for (FileItem item : list) { //判断表单是否是普通类型,text,select等都是普通类型,否则该表单是file类型 if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString("UTF-8"); req.setAttribute(name, new String(value.getBytes())); } else { //得到当前图片文件name名 String filesName = item.getFieldName(); //得到file文件名 String fileName = item.getName(); //判断文件名是否为空 if (fileName == null || "".equals(fileName.trim())) { continue; } //substring截取字符串,如果上传的文件名前面有\\,最后一个\\后面的文件名 fileName = fileName.substring(fileName.lastIndexOf("\\") + 1); //InputStream getInputStream(),以流的形式返回上传文件的数据内容。 InputStream inputStream = item.getInputStream(); //保存到数据库的路径 String dataPath = imgPath + fileName; //图片的具体路径(全路径) String imgUrl = savePath + dataPath; //返回地址 fileUrl=dataPath; //文件输出流 FileOutputStream fileOutputStream = new FileOutputStream(imgUrl); //创建一个为1M的缓冲区 byte buffer[] = new byte[1024]; int length = 0; //判断流是否已经读取完毕 while ((length = inputStream.read(buffer)) > 0) { fileOutputStream.write(buffer, 0, length); } //关闭输入输出流,并删除临时文件 inputStream.close(); fileOutputStream.close(); item.delete(); } } } catch (Exception e) { e.printStackTrace(); } return fileUrl; } }