13 - 文件上传保存路径的几种方案
程序员文章站
2022-03-11 21:56:53
...
1 文件上传保存路径
1.1 按日期保存文件
UploadServlet
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 解析表单数据
// 1-工厂类
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2- 获取文件上传对象
ServletFileUpload sfu = new ServletFileUpload(factory);
try {
// FileItem 相当于一个 input 标签的数据
List<FileItem> items = sfu.parseRequest(req);
for (FileItem item : items) {
if (item.isFormField()) { // 普通数据
System.out.println(item.getFieldName() + "-" + item.getString());
} else { // 文件数据
System.out.println("文件名:" + item.getName());
System.out.println("文件类型:" + item.getContentType());
System.out.println("文件大小:" + item.getSize());
//System.out.println("文件字段:" + item.getString());
//如果是文件,保存到本地
// 1.指定保存目录
// 添加日期目录
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String dateStr = sdf.format(new Date());
String path = req.getServletContext().getRealPath("upload/"+ dateStr);
System.out.println("保存文件的路径:" + path);
// 2.创建文件夹
File dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
System.out.println("创建文件夹了");
} else {
System.out.println("文件夹存在了");
}
// 3.把上传的文件保存
// 指定文件保存的名字
//后缀
String suffix = item.getName().split("\\.")[1];
String fileName = UUID.randomUUID().toString() + "." + suffix;
//System.out.println("保存的文件名:" + fileName);
// 拼接文件保存的路径
String fileSavePath = path + "\\" + fileName;
System.out.println("保存文件路径:" + fileSavePath);
// 保存
item.write(new File(fileSavePath));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
1.2 把日期转为16进制字符串
UploadServlet
String dateHexStr = Integer.toHexString(new Date().hashCode());
String path = req.getServletContext().getRealPath("upload/" + dateHexStr);
2 文件上传注意的问题
2.1 中文乱码
List<FileItem> items = sfu.parseRequest(req);
for (FileItem item : items) {
if (item.isFormField()) { // 普通数据
System.out.println(item.getFieldName() + "-" + item.getString("UTF-8"));
}
2.2 文件上传大小限制
- 单个文件大小
ServletFileUpload.setFileMax(字节)
- 总文件大小
ServletFileUpload.setSizeMax(字节)
2.3 临时文件
-
DiskFileItemFactory
,产生 FileItem 对象。内部有一个缓存,大小默认10kb。如果上传的文件超过 10kb,用磁盘作为缓存。默认是系统的临时目录。
下一篇: axios 全局拦截
推荐阅读