在win10本地开发springboot项目能上传图片,并能通过URL直接从浏览器访问,但是部署到服务器上后能上传文件,但是通过浏览器无法访问图片

1.首先springboot项目在Window和Linux服务器的项目资源路径是不一样的,需要分开来设置路径:

 @Override@Transactional(readOnly = false, rollbackFor = Exception.class)public String uploadImage(MultipartFile image, Comment comment, String rootUrl) throws Exception {if (comment == null) {return null;}String imgRequestUrl = null;if (!image.isEmpty()){File imagePath;  //图片存放地址//获取文件名称String  imageName = image.getOriginalFilename();String os = System.getProperty("os.name");if (os.toLowerCase().startsWith("win")) {  //windows系统String path = System.getProperty("user.dir");  //获取项目相对路径imagePath = new File(path+file_path);} else {//linux系统//获取根目录//如果是在本地windows环境下,目录为项目的target\classes下//如果是linux环境下,目录为jar包同级目录File rootPath = new File(ResourceUtils.getURL("classpath:").getPath());if (!rootPath.exists()) {rootPath = new File("");}imagePath = new File(rootPath.getAbsolutePath()+file_path);}if (!imagePath.exists()) {//不存在,创建imagePath.mkdirs();}//使用工具类生成一个随机的文件名防止文件名重复String newImageName = IDUtils.getFilename(imageName);//创建图片存放地址File imageResultFile = new File(imagePath + "/" + newImageName);imgRequestUrl = rootUrl + "/images/" + newImageName;if (imageResultFile.exists()) {log.info("图片已经存在!该图片的访问请求地址:[{}]", imgRequestUrl);} else {//图片尚未存在,将图片保存到指定的路径中image.transferTo(imageResultFile);}//将该图片的地址设置到comment中comment.setCommentImagePath(imgRequestUrl);//图片在磁盘中的实际地址
//        String imageResultPath = imageResultFile.getCanonicalPath();log.info("该图片的访问请求地址:[{}]", imgRequestUrl);}//设置commentcomment.setIsDeleted(Comment.DEFAULT_ISDELETED_FALSE);comment.setStatus(Comment.DEFAULT_STATUS_TRUE);comment.setCollection_count(Long.valueOf(0L));comment.setLike_count(Long.valueOf(0L));int fla = commentMapper.insert(comment);if (fla == 1){//插入成功返回图片的地址return imgRequestUrl;}else{//插入失败返回NULLreturn  null;}}

2.然后配置一个WebMvcConfigurer用于解析静态资源图片,将服务器的静态资源目录通过映射到暴露的访问路径:

@Configuration
public class FileConfig implements WebMvcConfigurer {@Value("${images.url-path}")private String file_path ;@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {//在windows环境下的图片存放资源路径String winPath = System.getProperty("user.dir")+file_path;//在Linux环境下的图片存放资源路径
//        String linuxPath = "/usr/local/my_project/images/";String os = System.getProperty("os.name");if (os.toLowerCase().startsWith("win")) {  //windows系统System.out.println(winPath);//第一个方法设置访问路径前缀,第二个方法设置资源路径registry.addResourceHandler("/images/**").addResourceLocations("file:"+winPath);}else{//linux系统File rootPath = null;try {rootPath = new File(ResourceUtils.getURL("classpath:").getPath());} catch (FileNotFoundException e) {e.printStackTrace();}if(!rootPath.exists()){rootPath = new File("");}System.out.println(rootPath.getAbsolutePath()+file_path);File  imagePath = new File(rootPath.getAbsolutePath()+file_path);if(!imagePath.exists()){//不存在,创建imagePath.mkdirs();}registry.addResourceHandler("/images/**").addResourceLocations("file:"+rootPath.getAbsolutePath()+file_path);}}
}
  • addResoureHandler:指的是对外暴露的访问路径
  • addResourceLocations:指的是内部文件放置的目录

3.本博文已同步到个人博客,如有需要请移步:

http://moyisuiying.com/index.php/javastudy/springboot/476.html

在win10本地开发springboot项目能上传图片,并能通过URL直接从浏览器访问,但是部署到服务器上后能上传文件,但是通过浏览器无法访问图片相关推荐

  1. Kotlin开发springboot项目(一)

    Kotlin开发springboot项目(一) Kotlin语言与Xtend语言有很多相似之处 为什么会存在这么多JVM语言? 现存的语言提供了太过受限制的功能,要不就是功能太过繁杂,导致语言的臃肿和 ...

  2. 通过域名访问自己部署到服务器上的项目

    通过域名访问自己部署到服务器上的项目 如何不输入项目名端口号直接访问java web项目 1.省略输入端口号的步骤 在Linux的下面部署了tomcat,为了安全我们使用非root用户进行启动,但是在 ...

  3. IDEA springboot项目中properties配置文件 {针对将对应GBK改为UTF-8并勾选转为ASCII后仍无效情况} 运行时中文乱码解决

    springboot项目中properties配置文件中,运行时中文乱码情况 file encoding里边进行设置,设为utf-8并勾选转为ascii,分别在setting.setting for ...

  4. 使用IntelliJ IDEA 2020 高效开发 springboot项目

    文章目录 一.快速开发基础配置 1. 全局配置 2. maven 3. 自动导入包 4. 取消大小写敏感 一.快速开发基础配置 前置知识: 有些时候明明都设置好了一些配置,但是新建项目之后,就恢复默认 ...

  5. 开发springboot项目,遇到的一些问题总结

    首先看一下我的项目目录吧 1,添加拦截器 我们做项目肯定要用到拦截器这个功能哈,没登录的话一些页面我们是不能访问的哈,这里是用到了HandlerInterceptor. 分别在图中的位置创建2个目录和 ...

  6. win10+python开发django项目day03

    一.创建django项目 1.进入虚拟环境创建django项目 cd Python\envdjango01\Scripts activate cd .. #创建django项目 django-admi ...

  7. 前后端开发-springboot项目/java搭配vue获取谷歌验证码

    效果如上 1.添加依赖 <!-- 谷歌验证码依赖--><dependency><groupId>com.github.axet</groupId>< ...

  8. 服务器怎么用u盘传文件进去_本地文件上传到linux服务器的几种方法

    本文介绍几种常见的方法,把文件上传到Linux服务器中!速维网络 常见有使用:scp命令.xshell软件里的xftp程序.U盘挂载.服务器自带的lrzsz程序. 一.scp使用说明: 1.把本机的文 ...

  9. springboot项目不加端口号也可以访问项目的方法

    大家好,我是雄雄,欢迎关注公众号:雄雄的小课堂. 今天给大家分享的是,在nginx中配置域名以及端口号. 前言: 实际开发中,我们可能经常会有这样的情况,在本地的springboot项目中,会设置项目 ...

最新文章

  1. Scala集合体系:可变集合和不可变集合
  2. suface怎么把计算机放到桌面,快速使用Surface的八条技巧
  3. SAP ABAP实用技巧介绍系列之 template的match顺序
  4. 楼继伟:现有5G技术很不成熟
  5. python封装exe 时间time问题_python模块之datetime
  6. python sklearn生成分类、回归任务数据集(可选切分训练数据/测试数据)
  7. 使用Vanilla.js构建单页应用程序(SPA)网站
  8. 【报告分享】2020年B站UP主价值研究报告.pdf(附下载链接)
  9. 【HTTPS运维神器】终于等到你!MySSL企业版重磅上线!
  10. 【论文研读】【医学图像分割】【BCRNN】Fine-grained Recurrent Neural Networks for Automatic Prostate Segmentation ...
  11. java gpu hash_比特币 GPU 挖矿 Sha256 Hash实现(OpenCL)
  12. 8-3-无用单元收集-动态存储管理-第8章-《数据结构》课本源码-严蔚敏吴伟民版...
  13. html星号密码查看器,万能星号密码查看器
  14. 第七章软件项目资源管理
  15. c语言冒泡排序知识点,c语言冒泡排序
  16. 全球与中国切板刀市场深度研究分析报告
  17. Xampp/MySQL Mysql的启动失败问题(端口号被占用):Xampp port 3306 in use by“ Unable to open process“
  18. 第四章 QAM调制方案仿真
  19. 软件测试之软件测试的分类上
  20. 苹果系统java小游戏_Mac自带小游戏怎么玩?

热门文章

  1. 产品经理 - 路漫漫其修远兮
  2. 机器学习入门 笔记(二) 机器学习基础概念
  3. Visual studio解决方案管理器找不到了怎么办
  4. [爬虫实战]利用python快速爬取NCBI中参考基因组assembly的相关信息
  5. 安卓机更新系统会卡吗_都说安卓手机用一两年就卡到不行,但知道这3招,同样可以用很久...
  6. MathType如何编辑等号带点
  7. 2022-05-05随手更新文章,以及记录一下新的微信步数接口
  8. JMokit中的@Mocked与@Injectable区别
  9. 小程序开发需要什么步骤?步骤教程分享
  10. 如何快速的把m4a转换成mp3格式