1这是我最开始存储图片到项目获取地址的方法用下面这个方法去获取我想要存地址结果很不理想,每次获取的是target下的目录,(ps:我用的是idea 发布用的是exploded包,不知道和这个有关系没)D:\workCode\文件名\项目文件名\target\项目名fileName = request.getSession().getServletContext().getRealPath("/");//这一步就行获取地址我的这项目用的方法
后来我看了这个博客图片保存到Tomcat的webapps目录保存方法有用,展示我没用到但是试了一下没成功,感觉是我自身问题没理解博主的代码图片保存在Tomcatwebapps目录下代码如下 (亲测方法有效)public static String uploadFile(MultipartFile file,HttpServletRequest request) throws IllegalStateException, IOException{Logger logger = Logger.getLogger(UploadImg.class);if(file!=null){//获取上传文件的原始名称String originalFilename = file.getOriginalFilename();String newFileName ="";String pic_path;// 上传图片if ( originalFilename != null && originalFilename.length() > 0) {//获取Tomcat服务器所在的路径String tomcat_path = System.getProperty( "user.dir" );System.out.println(tomcat_path);//获取Tomcat服务器所在路径的最后一个文件目录String bin_path = tomcat_path.substring(tomcat_path.lastIndexOf("\\")+1,tomcat_path.length());System.out.println(bin_path);//若最后一个文件目录为bin目录,则服务器为手动启动if(("bin").equals(bin_path)){//手动启动Tomcat时获取路径为:D:\Software\Tomcat-8.5\bin//获取保存上传图片的文件路径pic_path = tomcat_path.substring(0,System.getProperty( "user.dir" ).lastIndexOf("\\")) +"\\webapps"+"\\pic_file\\";}else{//服务中自启动Tomcat时获取路径为:D:\Software\Tomcat-8.5pic_path = tomcat_path+"\\webapps"+"\\pic_file\\";}// 新的图片名称newFileName =UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));//可以自己写重新生成名字的方法,我没看懂就没用他的logger.info("上传图片的路径:" + pic_path + newFileName);// 新图片File newFile = new File(pic_path + newFileName);// 将内存中的数据写入磁盘file.transferTo(newFile);//这个方法我也没有用,如果自己有工具类可以使用自己的}return newFileName;}else{return null;}}
-----------------------------------当然遇到问题可以访问我的其他相关解决方法
2图片已经存在tomcat下webapp下pic_file中了那我们该如何访问它呢?我当时想直接路径访问比如这样D:\apache-tomcat-8.0.52\webapps\pic_file\1236485.jpg这时候会有问题,使用谷歌浏览器访问本地资源时浏览器会报Not allowed to load local resource后来查询得知谷歌浏览器为保护安全不允许直接访问本地资源,然后我就要解决这问题进行访问这个资源有两个解决方案方法一:更改tomcat的server.xml文件就行虚拟地址映射,就能访问到该资源。(对于我来说这并不能解决问题,因为我数据库存贮着我图片的地址,所以看上边那个tomcat地址,每个人的tomcat版本号名不一样导致文件名也不一样,可以都改成tomcat,但是去给客户部署的时候还要有这种步骤肯定很麻烦,到时候部署的人员不知道又会有麻烦,所以不推荐这种方法)方法二:方法一其实是我们陷入了一个误区的一个想法,这个误区也是我看到別的博客才发觉出来,我当初在想应该有很多人也遇到过我这样的问题把图片存入本地然后展示出来,但是在网上搜索资源很匮乏。后来发现是我思想出现了问题,也是我经验不足吧,这个给我了些启发怎么访问本地图片/资源。我们可以像访问文件服务器一样进行资源访问啊,比如http://localhost:8080/pic_file/1236485.jpg。这样就能直接访问我们的资源并且下次发的包就不会把原来的图片丢失。
3----------------------------------
方法三:使用fastDFS开源的轻量级分布式文件系统进行文件上传,查看,---条件允许的情况下---此方法优于上面两种,
fastDFS---安装使用上网搜索
安装条件中写自启动
其他书写都一样