Tomcat+Chrome访问本地文件

Tomcat+Chrome访问本地文件

1.保存在服务器上面

最近在用JEE做一个小小的系统(智能办公系统),在期间遇到了很多的问题,其中做了一个图片上传的功能。前面一直都放在Tomcat服务器上,但每次重新启动Tomcat的时候,发现再次登录的时候报错文件不能别发现。后来查了一些资料发现,在本地开发的时候最好把文件指定到本地的一个目录中,这样就可以避免上传的文件丢失问题,因为Tomcat会定期的对文件目录进行删除,就相当于放在服务器上面了,如果你不去关闭它,他就一直存在,但因为是开发测试,经常需要重新启动Tomcat,这样再直接放在Tomcat上面,就会报错了。

最近在用JEE做一个小小的系统(智能办公系统),在期间遇到了很多的问题,其中做了一个图片上传的功能。前面一直都放在Tomcat服务器上,但每次重新启动Tomcat的时候,发现再次登录的时候报错文件不能别发现。后来查了一些资料发现,在本地开发的时候最好把文件指定到本地的一个目录中,这样就可以避免上传的文件丢失问题,因为Tomcat会定期的对文件目录进行删除,就相当于放在服务器上面了,如果你不去关闭它,他就一直存在,但因为是开发测试,经常需要重新启动Tomcat,这样再直接放在Tomcat上面,就会报错了。

下面的代码存放的位置是Tomcat上面。

// 获取到前端传入的文件流
Part file = request.getPart("empImg");
// 获取文件保存的根目录,也就是本项目在Tomcat项目的根目录
File root = new File(getServletContext().getRealPath("/"));
//获取当前的时间
String uri = "upload/"+new SimpleDateFormat("yyyy/MM/dd/").format(new Date());
//保存在服务器的upload目录下面,并且按照时间进行换行,这样方便管理
new File(root,uri).mkdirs();
//用到了hutool工具的IoUtil,表示在文件夹下面写入该上传的文件
IoUtil.copy(file.getInputStream(), new FileOutputStream(new File(root,uri)));
//一般这样的代码就表示存放在服务器上面

2.保存在本地目录

上面放在服务器上面,就会造成丢失的问题,一般在本地写代码的时候,最好放在本地的目录下面,防止文件的丢失。下面的这段代码表示的是把上传到的文件写到本地D盘下面的upload目录下面。

// 获取到前端传入的文件流
Part file = request.getPart("empImg");
String uri = "D:/upload/"+new SimpleDateFormat("yyyy/MM/dd/").format(new Date());
new File(uri).mkdirs();
uri += Long.toString(id, 36)+"."+FileUtil.extName(file.getSubmittedFileName());
try {
    //hutool工具中的流数据的拷贝
    IoUtil.copy(file.getInputStream(), new FileOutputStream(new File(uri)));
} catch (Exception e) {
    throw new CodeException(500, "上传的文件保存失败");
}

然后上传的时候触发servlet事件就可以在d盘upload目录下面看见上传的文件了。下面讲解的就是在读取的时候,谷歌浏览器会报错。

3.浏览器访问本地资源

前面我们一直把文件那些放在Tomcat上面,所以一直没有出错,但把文件放在本地的时候,在前端再用绝对路径去访问的时候会出现Not allowed to load local resource: file:///... 这样的错误,这是谷歌浏览器为了安全考虑,不允许直接访问本地资源。

在这里插入图片描述

我遇到这个错误的时候,尝试了很多解决办法,大多数说的都是去更改Tomcat的xml配置文件,这种方法我没有测试成功,并且很麻烦,一不小心就会出错,导致Tomcat服务器不可用,不推荐这种做法。

因为我使用的是eclipse,集成Tomcat,可以直接在eclipse进行操作,也相当于去改Tomcat的配置文件了。

第一步双击Tomcat服务器。
在这里插入图片描述

第二步点击modules

在这里插入图片描述

第三步点击点击如下图所示的按钮。
在这里插入图片描述

最后就是在Document base这一栏选择你准备把上传文件放到那个目录,我这里是放到D盘下面的upload目录下面,然后下面的path表示你用什么来代替D:\upload,我这里写的是/upload,那么我在前端访问这个本地资源的时候,就可以用upload来代替D:\upload

就比如有一张图片的地址为D:\upload\1.png,如果是直接用这个绝对路径肯定是访问不到的,经过各个的一系列操作后,我们在前端写这个文件路径的时候就可以直接写为/upload/1.png,这样浏览器就可以访问到本地的资源了。记得改了这个之后,Tomcat服务器响应重启一下。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值