解决在IDEA中部署Tomcat图片储存和虚拟访问路径 以及解决部署到服务器中上传图片后无法回显的404问题

这是在项目中遇到了上传图片的功能,遇到了需要配置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(应用并确认)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4. 到这里,运行本地程序是可以直接查看到上传的图片的了

在这里插入图片描述

5. 但是在部署到服务器时,发现上传的图片无法直接显示出来,出现了404的错误

在这里插入图片描述

6. 这时候需要重启Tomcat服务后重新进入查看才可以看到上一次上传上去的图片

在这里插入图片描述

7. 后面经过了排查,发现了在Tomcat配置中的Context.xml文件中有这样的一个属性:

在这里插入图片描述

8. 总结

1. 在这里的antiResourceLocking属性设置为true 的话,就会将应用的docBase移到临时目录下,让Tomcat不会占用webapps下的文件,Tomcat里java.io.tmpdir默认指向Tomcat的temp目录。

2. 另外在这里如果还有一个属性antiJARLocking,则也会造成上传图片无法直接回显的问题,antiJARLocking -如果为true,当通过URL访问JAR中的资源时,Tomcat类加载器将采取额外措施来避免JAR文件锁定。这将影响应用程序的启动时间,但在可能发生文件锁定的平台或配置上可能会被证明是有用的.如果没有指定,默认值为false。

最后通过对服务器的Tomcat的配置文件Context.xml的antiResourceLocking属性进行了删除就可以解决上传图片无法直接回显的问题。(若配置文件里还有antiJARLocking属性,则将其一并进行删除)

  • 1
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值