上一篇博客写的是vue实现文件上传,这篇写java如何接收。这里实现的是本地接收,还可以接收完以后上传到图片服务器或者做转发,这需要看自己公司的业务了,但是无论如何我们都需要把图片的路径记录下来存到库里,这才是正常的逻辑。。。但是我上家公司居然让我把PDF的文件的流存到库里,还一本正经的告诉我,我们的库十几个T .-__-.。这里的业务逻辑我没写,看官们可以在上传成功之后将路径存起来即可。
private Logger logger = Logger.getLogger(this.getClass()); // 日志,不需要可以去掉
//上传服务器的地址
@RequestMapping("/fileUploadLocal")
public ResponseBody fileUploadLocal(MultipartFile uploadFile)throws Exception{
try {
String basePath = null; // 文件上传位置
//1.获取文件上传的位置
// String basePath = request.getSession().getServletContext().getRealPath("/upload");
URL uploadUrl = this.getClass().getResource("/upload");
if(uploadUrl!=null){
basePath = uploadUrl.getPath();
}else {
basePath = this.getClass().getResource("/").getPath()+"upload";
}
System.out.println(basePath);
//2.为了防止一个目录下文件过多,创建一个二级目录
String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//3.判断文件是否存在
File file = new File(basePath,datePath);
if(!file.exists()){
file.mkdirs();
}
//4.取出文件名
System.out.println("getName:" +uploadFile.getName());
System.out.println("getOriginalFilename:"+uploadFile.getOriginalFilename());
String fileName = uploadFile.getOriginalFilename();
//为了防止文件重名,随机化文件名
String uuid = UUID.randomUUID().toString().replace("-","").toUpperCase();
fileName = uuid+"_"+fileName;
//写文件
uploadFile.transferTo(new File(file, fileName));
} catch (Exception sb){
logger.info(sb.getMessage()); // 记录日志,不需要可以去掉
throw new SbException("文件上传出现异常!"); // 自定义的异常类,可以换成运行时异常new RuntimeException("错误信息");
}
return DyTool.responseReturn(StatusEnum.UPLOADSUCCESS); // 响应回页面的消息
}
因为我用的是SpringBoot框架,框架已经自定义了一些默认配置,比如上传文件的大小,默认限制了1M。我们上传的文件有点大的话就需要进行更改默认配置,下一篇博文就是写如何更改默认配置
如果发现什么问题请留言,毕竟代码都是人写的难免会出错。