如果需要做文件上传,我们会在controller中获取文件存储路径
temp:
materials:
file: ./tempfile/
String filePath = request.getServletContext().getRealPath(tempMaterialsFile);
@Value("${temp.materials.file}")
private String tempMaterialsFile;
@ApiOperation(value = "上传图片")
@PostMapping("/upload/img")
public Result<String> uploadImage(@RequestPart("file") MultipartFile file, HttpServletRequest request) {
String filePath = request.getServletContext().getRealPath(tempMaterialsFile);
String res = wxworkMaterialService.uploadImage(file, filePath);
return Result.successResult(res);
}
但是,如果在定时任务中我们需要对文件进行处理,那么需要获取文件上传时的路径
此时,是没有request的,那么如何获取呢?
注入WebApplicationContext
String filePath = applicationContext.getServletContext().getRealPath(tempMaterialsFile);
@Value("${temp.materials.file}")
private String tempMaterialsFile;
@Autowired
private WebApplicationContext applicationContext;
@Override
public ReturnT<String> execute(String s) throws Exception {
String filePath = applicationContext.getServletContext().getRealPath(tempMaterialsFile);
//业务处理
}
注意:如果使用ContextLoader.getCurrentWebApplicationContext()
,会报空指针异常
WebApplicationContext applicationContext = ContextLoader.getCurrentWebApplicationContext();
System.out.println(applicationContext); // null
ServletContext servletContext = applicationContext.getServletContext(); //NullPointException
String path = servletContext.getRealPath(tempMaterialsFile);