Springboot文件上传与文件映射(保存URL至数据库)完整代码 您所在的位置:网站首页 如何获取上传文件的文件名称和内容 Springboot文件上传与文件映射(保存URL至数据库)完整代码

Springboot文件上传与文件映射(保存URL至数据库)完整代码

2023-12-24 13:59| 来源: 网络整理| 查看: 265

Springboot文件上传与文件映射(保存URL至数据库)完整代码

文章目录 Springboot文件上传与文件映射(保存URL至数据库)完整代码0.前言1.配置上传文件保存路径1.1 Windows环境1.2 Linux环境 2.添加文件路径映射2.1 Windows环境下文件路径映射2.2 Linux环境下文件路径映射 3.控制层/实体类代码4.其他代码4.1服务层代码4.2 数据访问层4.3启动类 5.总结

0.前言

场景:上传图片文件至服务器,并且在数据库中保存一个有效URL,用于获取该图片。

先看最终效果如下: 长传图片文件效果演示 我之前也看过很多相关的文章,大部分都只是之讲解了一部分,导致我看了很多…做了很多无用功,因此实现此功能后想记录并总结一下完整的过程,已被之后复习。 其实这个功能很简单,把它分为两步部分:

上传文件文件映射

而且这两部分是独立的,互不影响。 上传文件有多种方法:

使用Servlet的API,write()方法写入文件(本文采用的这种)使用MultipartFile对象获取上传的文件并使用该对象的transferTo()方法使用commons-fileupload工具包实现文件上传 等等… 这里不会具体把每一种都写,只写了第一种,也是本人认为最简洁的。

文件映射比较简单,只需添加一个配置类即可,即本文的第二点。

1.配置上传文件保存路径 1.1 Windows环境

首先,先搞定window环境下的本地测试。我是在D盘下新建了一个用于保存上传文件的restaurantRes文件夹。 在application.properties中添加配置如下:

#文件上传路径 #windows环境下上传文件保存目录 spring.servlet.multipart.location=d:/restaurantRes 1.2 Linux环境

之后要在Linux环境下的服务器测试,我在根目录下创建了pic文件夹,pic下创建了upload文件夹。配置写法如下: (区别:Linux文件系统没有分盘)

#文件上传路径 #linux环境下上传文件保存目录 spring.servlet.multipart.location=/pic/upload 2.添加文件路径映射

新建一个配置类Java文件:WebMvcConfig.Java(名字取啥不重要) 编码如下:

2.1 Windows环境下文件路径映射

上传文件路径:D盘下的restaurantRes目录中(D:/restaurantRes/) 访问路径举例:http://localhost:8080/restaurantRes/青豆玉米粒披萨.jpg

代码中: addResourceHandler为添加访问前缀,及上述的访问路径中的restaurantRes addResourceLocations为添加文件原本的存储路径,及上述的上传文件路径中的D:/restaurantRes/

@Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); //windows本地文件目录 registry.addResourceHandler("/restaurantRes/**").addResourceLocations("file:D:/restaurantRes/"); } } 2.2 Linux环境下文件路径映射

与上述基本一致,只是路径写法不一样。

@Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); //linux服务器文件目录 //registry.addResourceHandler("/restaurantRes/**").addResourceLocations("file:/pic/upload/"); } } 3.控制层/实体类代码

代码中包含每个操作的详细注释。 其中注释掉了URL中的端口,是因为本项目已经配置过Https了,默认会使用443,无需再写端口。如果是windows环境本地测试或没有配置hhtps那就加上那个端口就好啦。

@Controller @RequestMapping(value = "/restaurantApi/admin") public class AdminController { static String fileLocation = "/restaurantRes/";//图片资源访问路径 //存储预返回页面的结果对象 private Map result = new HashMap(); //注入业务对象 @Resource private AdminService adminService; @PostMapping("/addFood") @ResponseBody public Map uploadFood(String name, double prices, String description, Part pictureFile, HttpServletRequest request) { //获取提交文件名称 String filename = pictureFile.getSubmittedFileName(); //定义上传文件存放的路径 String path = request.getSession().getServletContext().getRealPath(fileLocation);//此处为tomcat下的路径,服务重启路径会变化 System.out.println(path); //返回保存的url,根据url可以进行文件查看或者下载 String filePath = request.getScheme() + "://" + request.getServerName() //+ ":" + request.getServerPort() //端口 https443端口无需添加 + fileLocation + filename; String pictureFileURL = filePath;//根路径+文件名 //插入这条Food数据 adminService.addFood(new Food(name, prices, description, pictureFileURL)); //写入文件 try { pictureFile.write(filename); result.put("Result", "添加菜品信息成功"); } catch (IOException e) { e.printStackTrace(); result.put("Result", "添加菜品信息失败"); } return result; } }

其中Food实体类的具体定义如下,与数据库中food表字段一一对应:

/** * 菜品实体类 * 1.菜名 * 2.价格 * 3.菜品详细描述 * 4.菜对应的图片文件URL */ //Lombok插件使用注释 @Data // get,set //@NoArgsConstructor //无参构造 @AllArgsConstructor //有参构造 public class Food { private String name; private double prices; private String description; private String pictureFileURL; }

相信到这里,上传文件与文件映射功能已经基本了解过程了,与上传文件与文件映射功能本身的代码已经全部展示了,下面是完成插入这条food数据操作的其他代码.

4.其他代码 4.1服务层代码

只有插入菜品信息的代码。 AdminService.java

public interface AdminService { // 添加信息 int addFood(Food food); }

AdminServiceImpl.java

@Service @Transactional public class AdminServiceImpl implements AdminService { //注入Mapper接口对象 @Resource private AdminMapper adminMapper; @Override public int addFood(Food food) { return adminMapper.insertFood(food); } } 4.2 数据访问层

插入这条数据 AdminMapper.java

/** * 数据访问层-操控信息 */ @Mapper public interface AdminMapper { // 添加菜品信息 int insertFood(Food food); }

AdminMapper.xml

INSERT INTO food(name, prices, description, pictureFileURL) VALUES (#{name}, #{prices}, #{description}, #{pictureFileURL}) 4.3启动类 @SpringBootApplication @MapperScan("com.lipiao.traveltreasure.dao") //扫描Mapper接口 public class TravelTreasureApplication { public static void main(String[] args) { SpringApplication.run(TravelTreasureApplication.class, args); } } 5.总结

之前在这个功能花费了一些时间,是因为路径问题出错了,少写或多写了/。 还是得细心细心再细心! 文件路径映射+文件上传至此已完成了,希望这篇自我小结得笔记能够对你帮助!若有问题欢迎留言。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有