上传文件注意事项

上传文件注意事项

客户端

使用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();
   }
}  
4.将in输出到要保存的文件中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值