最近在写项目的时候,实现一个文件导入功能时,在上传文件时,程序报错java.io.UncheckedIOException: Cannot delete C:\Users\18578\AppData
出现这个错的时候第一印象是权限不够,临时文件删除不了,于是根据报错日志查看源码,报错源码位置如下
springboot上传文件时会生成一个临时文件,而这个临时文件最终会执行清除操作清除掉。但是再看源码的时候发现,执行删除操作的时候,程序执行失败,异常是被抛掉了,并不会影响程序继续执行,但是我的项目里面的上传功能是直接被阻断了,程序无法进行,看到这里,我就觉得很奇怪了,到底是哪里主动抛出了异常,阻断了程序执行,一时没有头绪。其实这个抛出的错误在没有关闭文件流的时候也会出现,但很明显,我不是由于这个原因。于是我打断点,看下执行的堆栈信息,一路沿着源码往上执行,最终找到了程序异常的地方
由项目里面有一个环绕日志打印的切面引起(这个日志打印没用,应该是之前同事复制的以前哪个项目的),这个切面用于接口日志打印,而就是在日志打印的时候,引起的上传功能报错,罪魁祸首如下
使用了json.tojsonstring(),所以执行的时候出错了。
结论:由于一个切面打印日志,错误的使用了json.tojsonstring去打印arg参数,导致的上传时,直接就程序异常了