上传文件注意事项
客户端
使用form形式multiform-data形式上传文件
服务端接收处理方式
1.页面传入HttpServletRequest request
2.判断request instanceof MultipartHttpServletRequest 若成功则继续进入以下步骤
3.强制类型转换
multipartHttpServletRequest = (MultipartHttpServletRequest) request;
4.获取MultipartFile
MultipartFile file = multipartHttpServletRequest.getFile("uploadImg");
//备注:uploadImg为form表单中input的name属性值
5.处理MultipartFile multipartFile
方式1.利用临时文件上传图片
1.将file内容传递给临时文件
String originalFileName = multipartFile.getOriginalFilename();
File tempFile= null;
if (StringUtils.isBlank(originalFileName) || !originalFileName.contains(".")) {
log.error("uploadImg fileName 为空或者不会包含[.],fileName:{}", originalFileName);
} else {
tempFile= File.createTempFile("student", "." + getFileSuffix(originalFileName));
multipartFile.transferTo(tempFile);
}
2.将临时文件上传到服务器
3.删除临时文件
方式1: tempFile.deleteOnExit();
此种删除方式只有在jvm正常退出时才会删除临时文件,将测试,在javaWeb项目中,一般情况下jvm都无法正常退出,导致临时文件一直存在,时间长后临时文件不断积累,最后就会占满磁盘空间(不推荐使用)
方式2:tempFile.delete();
此种方式无论文件是否存在,是否在使用,都会删除临时文件,建议在临时文件上传完毕后调用,建议在finally代码块中调用删除临时文件方法.(推荐使用)
方式2.利用FileItem获取输入流上传图片
1.判断MultipartFile的类型
multipartFile instanceof CommonsMultipartFile
2.强制类型转换,然后获取FileItem
FileItem item = ((CommonsMultipartFile)uploadImg).getFileItem();
3.从FileItem中获取输入流内容
//处理上传文件
String fileName = item.getName();
//获取上传文件名称
fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
if (StringUtils.isBlank(fileName) || !fileName.contains(".")) {
log.error("uploadImg fileName 为空或者不会包含[.],fileName:{}", fileName);
} else {
boolean suffixCheck = false;
String suffixName = fileName.substring(fileName.indexOf(".") + 1, fileName.length()).toLowerCase();
//校验上传文件扩展名
if(StringUtils.isNotBlank(suffixName)) {
suffixCheck = imgSuffixList.contains(suffixName);
}
if (suffixCheck) {
//文件扩展名校验通过后,上传到jfs云存储
InputStream in = item.getInputStream();
}
}