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

发布时间:2021-11-30 01:20:57

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.总结

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

相关文档

  • Android 同一行2个TextView 右边的完全显示,左边的超出显示省略号
  • 躺着不晕起来就头晕是怎么回事,躺着起来头晕目眩怎么回事,躺着没事一起来就头晕怎么办
  • 招财图片头像风景图片
  • 中国梦,我的梦演讲稿以中国梦为题的演讲稿
  • HTTP请求头和响应头字段
  • 三星手机怎么查看bl版本
  • 支付宝
  • 波乌普名言
  • 数学与统计专业北师大数学《统计》教学设计
  • 青春共筑中国梦诗歌
  • Java 并发专题 : Semaphore 实现 互斥 与 连接池
  • 网络安全类型的征文800字优秀范文
  • ps3怎么把内置的游戏拷单硬盘里
  • 【机器学习算法笔记系列】朴素贝叶斯(NB)算法详解和实战
  • windows jupyter 无法import tensorflow
  • 董事长选举议案
  • 幼儿交通安全知识是什么
  • TCP/IP 第3章 地址族与数据序列
  • 妇联培训心得体会范文
  • 趣味传统猜字谜大合集
  • 喝豆奶要注意什么?选择豆奶要注意什么
  • 关于工会年终总结汇编9篇
  • 手机投影到平板
  • 深度学习(CV)显存占用分析
  • 两学一做的合格党员心得体会
  • 兰州财经大学长青学院大一新生必备东西
  • 对方把我拉黑了怎么才能打通
  • Dozer JavaBean映射 笔记
  • 什么是综合毛利率提高综合毛利率措施
  • 村干部创业承诺范文
  • 猜你喜欢

  • 2014年内蒙古赤峰事业单位考试职位表汇总
  • 兰州市材料设备零售公司名录2018版558家
  • 2021医生年终工作总结报告
  • 精选高中开学典礼教师致词范本
  • 如何反击他人的诡辩
  • 高中物理鲁科版选修3-2第一单元第1课《磁性电的探索》优质课公开课教案教师资格证面试试讲教案
  • 常州市教育局2002年上半年工作总结
  • 天津开发区星海电梯销售有限公司德州分公司(企业信用报告)- 天眼查
  • 2019-2020年九年级化学上册 第四单元 课题2 水的净化教案2 (新版)新人教版
  • linux下solr6.4通过虚拟机连接mysql数据库导入数据查询
  • 温县食品有限公司利民放心肉六店企业信用报告-天眼查
  • 秋作文700字_高一作文
  • 七年级数学上册1.2数轴、相反数与绝对值(第2课时)
  • XX年护士年度工作总结最新范文
  • K8S连接Harbor私有仓库
  • 2013届中考英语语法讲解复*3
  • 有机化学的发展与应用PPT3 苏教版
  • 形容成功的优美句子
  • 论重大危险源辨识,评价与控制
  • 精彩作文大全-新学期的第一步 精品
  • 华阳科技荣获 山东省技术创新奖
  • 会计实务:外币借款业务的核算
  • 商业保险管理制度守则
  • 2016年锂电池产业市场咨询分析报告(word版)
  • 碧根果可以生吃吗?生碧根果怎么吃
  • 2019五年级下册语文课件-16 桥 预习_ 人教新课标 (共7张PPT)教育精品.ppt
  • 怀集县兴为高脂松种植专业合作社企业信用报告-天眼查
  • 大连市金州佳美水产贸易公司企业信用报告-天眼查
  • 安徽省律师协会关于举办省律协项目投融资和项目建设法律专业委员
  • 重庆云动风行体育文化传播有限公司企业信息报告-天眼查
  • 酒店室内分布系统设计方案
  • 看部电影,透透彻彻理解IoC(你没有理由再迷惑!)
  • 小孩肠胃炎吃什么食物
  • 中国分几线城市
  • 盘点结婚新房铺床礼仪
  • 江西省抚州市金溪县第一中学2018-2019学年高二12月月考数学(文)试卷
  • 使用Windows Media Player翻录CD为WMA文件
  • 四年级上册数学课件-2.3平移与平行 北师大版(2014秋)(共23张PPT)
  • 生活饮用水安全知识
  • 2016年政治中考时政热点专题十
  • 销售合同管理制度(1)
  • 甘肃省天水市2017-2018学年高一语文下学期入学考试试题
  • 电脑版