这是在项目中遇到了上传图片的功能,遇到了需要配置Tomcat的图片存储路径到虚拟访问路径的问题,特地记录一下,在其中遇到了部署到服务器时上传图片后无法直接回显的问题,也对其进行了问题的解决。
上传图片的代码:
// 上传图片
public void fileUpload(FileUploadEvent e) {
String uploadedFileName = e.getFile().getFileName();
String newFileName = System.currentTimeMillis() + uploadedFileName.substring(uploadedFileName.lastIndexOf("."));
File targetFile = new File(photoOutPath + newFileName);
File parentFile = targetFile.getParentFile();
if (!parentFile.exists()) {
parentFile.mkdirs();
}
// photoOutPath : 图片的存放路径
if (StringUtils.isNotBlank(this.selectedRecord.getPhotoFileName())) {
File existsFile = new File(photoOutPath + this.selectedRecord.getPhotoFileName());
existsFile.delete();
}
try (FileOutputStream outputStream = new FileOutputStream(targetFile);) {
IOUtils.write(IOUtils.toByteArray(e.getFile().getInputstream()), outputStream);
outputStream.flush();
this.selectedRecord.setPhotoFileName(newFileName);
// 保存图片名到对应的item上
inventoryController.updateInventoryPhoto(newFileName, selectedRecord.getInvId());
} catch (IOException ioException) {
logger.error("write photo to {} failed: {}", photoOutPath, ioException);
throw new RuntimeException(ioException);
}
}
1. 首先需要在Tomcat的server.xml文件中配置图片的虚拟路径,由于我上传的图片是保存到D:/photo中的,所以将Tomcat的server.xml的配置设置成如下图:
2. 然后在修改完成后,由于我使用的是IDEA,所以我在本地上还需要在IDEA中修改Tomcat的图片访问路径,具体操作步骤如下:
3. 选择Edit Configuration -> Deployment -> 选择“+” 中的External Source ->选择D盘对应的photo文件夹(对应上图标签的docBase属性) -> 并修改Application context 中的内容(对应上图标签的path)-> Apply and OK(应用并确认)