当前位置: 首页 > news >正文

宜州网站建设服务网络推广外包搜索手机蛙软件

宜州网站建设服务,网络推广外包搜索手机蛙软件,哪里有做企业网站的,深圳软件公司开发从头开始搭建一个SpringBoot项目--SpringBoot文件的上传前言流程分析代码结构代码详情UploadFileInfo.classUploadController.classUploadDao.classUploadDao.xmlUploadServices.classUploadServicesImpl.class测试下载示例前言 文件的上传和下载是很多系统必备的功能&#xf…

从头开始搭建一个SpringBoot项目--SpringBoot文件的上传

  • 前言
  • 流程分析
  • 代码
    • 结构
    • 代码详情
      • UploadFileInfo.class
      • UploadController.class
      • UploadDao.class
      • UploadDao.xml
      • UploadServices.class
      • UploadServicesImpl.class
  • 测试
  • 下载
    • 示例

前言

文件的上传和下载是很多系统必备的功能,之前的一篇文章简单描述了下载,那么现在我们来实现上传文件并且存储到服务器

值得注意的是,在以下的示例系统中,我已经引入了SpringSecurity、Swagger、Mybatis等框架了。
详情参考: 从头开始搭建一个SpringBoot项目–SpringSecurity的配置

流程分析

用户上传文件,第一步肯定是选择文件,然后系统接收文件并保存到服务器,这一步里面我们首先要做的应该是获取此次上传信息,比如上传人、上传时间、上传文件类型等等。剩下的就是需要考虑的问题是,如何保存

我的意思是如何保存这个文件?比如文件名称,如果有两个用户上传了一个同样名字的文件,那我们就让用户保存吗?那肯定是不可以的。所以保存时候很重要的一点就是,文件不能同名。所以这里我们保存在服务器上的文件名称最好做一个映射:用户定义文件名 -- 服务器保存文件名称。这种映射关系可以保存在数据库中,这样就保证了文件名的唯一性。

比如用户上传文件名称为你遭老罪了.png,保存的时候用一个时间戳或者uuid + 文件后缀作为该文件在服务器上的名称,假设为:123456789.png,然后把你遭老罪了--123456789,这样的一个映射关系保存到数据库里面,这样用户要按照文件名从服务器上获取该文件的时候我们也能的找到,保存的时候也不会有同名的风险。

PS: 同名风险还是有的,虽然很小,但确实存在:UUID可能生成相同,时间戳可能多用户上传时一样,如果需要的话保存前可以做一个文件名同名检查。如果文件名已存在,则再生成一个。

上传文件的流程图的话大致是以下这样:
在这里插入图片描述

代码

结构

在这里插入图片描述

代码详情

UploadFileInfo.class

@Setter
@Getter
@ToString
@NoArgsConstructor
public class UploadFileInfo {@ApiModelProperty(value = "上传人id")int uploaderId;@ApiModelProperty(value = "上传人名称")String uploaderName;@ApiModelProperty(value = "上传人时间")String uploadTime;@ApiModelProperty(value = "上传文件大小")int size;@ApiModelProperty(value = "上传文件名称")String fileName;@ApiModelProperty(value = "上传文件唯一名称")String uName;@ApiModelProperty(value = "存储路径")String storePath;@ApiModelProperty(value = "文件后缀")String extension;public UploadFileInfo(UserBean userBean) {if (userBean == null)throw new RuntimeException("用户为空");this.uploaderId = userBean.getId();this.uploaderName = userBean.getUsername();}
}

UploadController.class

这里面的日期工具类在我的其他文章里 主页搜索日期就可找到。

@RestController
@Controller
@RequestMapping(value = "/upload/")
@Api(tags = "03 上传文件" , position = 3)
public class UploadController {//配置文件中保存的位置@Value("${root.upload.path}")private String uploadPath;@AutowiredUploadServices uploadServices;@ApiOperation(value = "上传文件测试" , notes = "支持所有文件")@PostMapping(value = "/uploadTest")public Result uploadFile(@RequestParam(required = true) MultipartFile file) {UploadFileInfo up = getUploadInfo(file);System.out.println(up.toString());if(uploadServices.addUploadInfo(up) <= 0) {return ResultUtil.success(ResultCode.ERROR);}try {//将当前文件保存到服务器指定目录下的文件file.transferTo(new File(up.getStorePath()));}catch (Exception e) {e.printStackTrace();}return ResultUtil.success(ResultCode.SUCCESS);}/*** @Description* @Param file* @Return {@link UploadFileInfo}* @Author 三文鱼先生* @Date 2023/3/2 10:45**/public UploadFileInfo getUploadInfo(MultipartFile file) {UserBean user = (UserBean) SecurityContextHolder.getContext().getAuthentication().getPrincipal();//设置上上传人基本信息UploadFileInfo uploadFileInfo = new UploadFileInfo(user);//文件存储时的唯一idString uName = UUID.randomUUID().toString().replaceAll("-" , "");//当前时间uploadFileInfo.setUploadTime(DateUtil.formatStr(new Date() , DateUtil.SecondPattern));//文件大小uploadFileInfo.setSize((int) file.getSize());String[] fileName = file.getOriginalFilename().split("\\.");String extension = fileName[1];//存储路径String storePath = uploadPath + uName + "." + extension;//上传文件后缀uploadFileInfo.setExtension(extension);//服务器存储地址uploadFileInfo.setStorePath(storePath);//使用uuid作为文件在服务器上的名称uploadFileInfo.setUName(uName);//文件的真实名称uploadFileInfo.setFileName(fileName[0]);return uploadFileInfo;}}

UploadDao.class

public interface UploadDao {//添加上传文件记录信息int addUploadInfo(UploadFileInfo uploadFileInfo);
}

UploadDao.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.uploadfile.dao.UploadDao"><insert id="addUploadInfo" parameterType="com.demo.uploadfile.bean.UploadFileInfo">insert into my_file(uploaderId,uploaderName,uploadTime,size,fileName,uName,storePath,extension) values(#{uploaderId},#{uploaderName},#{uploadTime},#{size},#{fileName},#{uName},#{storePath},#{extension});</insert>
</mapper>

UploadServices.class

public interface UploadServices {int addUploadInfo(UploadFileInfo uploadFileInfo);
}

UploadServicesImpl.class

@Service
public class UploadServicesImpl implements UploadServices {@AutowiredUploadDao uploadDao;@Overridepublic int addUploadInfo(UploadFileInfo uploadFileInfo) {return uploadDao.addUploadInfo(uploadFileInfo);}
}

测试

在这里插入图片描述

在这里插入图片描述

下载

下载的话就比较简单了,这里在之前的文章: 记SpringBoot下载的两种方式,在这里需要注意的应该是,配置SpringSecurity配置下不拦截/file/**
在这里插入图片描述

示例

图片文件可以查看后 右键自定义保存
在这里插入图片描述
其他文件诸如:doc、excel、rar等都会直接下载。
在这里插入图片描述

http://www.hkea.cn/news/445649/

相关文章:

  • 迎访问中国建设银行网站_永久免费的电销外呼系统
  • 类似AG网站建设网络营销的十大特点
  • 河北盘古做的网站用的什么服务器品牌策划与推广
  • 做网站开发的是不是程序员品牌营销与推广
  • 安卓android软件seo搜索引擎优化方式
  • 网站设计培训课程引流推广平台
  • 做淘宝美工需要知道的网站app软件推广平台
  • 做自己个人网站搜索竞价
  • 兰州网站优化哪家好手机系统流畅神器
  • 广东深圳住房和城乡建设部网站文章优化软件
  • java制作动态网站开发怎么可以让百度快速收录视频
  • 做网站管理好吗阳泉seo
  • 网站排名优化建设seo人人网
  • html5可以做动态网站惠州seo计费
  • 商城网站带宽控制河南网站建设哪家公司好
  • 贵阳网络公司网站建设网络推广公司深圳
  • 企业网站建设公司电话西安seo分析报告怎么写
  • 岳阳市政府网网站seo优化报告
  • 门头沟网站建设外贸谷歌推广
  • 铜陵市住房和城乡建设委员会网站中国最新疫情最新消息
  • 动态网站建设 教程接广告推广的平台
  • 人力资源和社会保障部是干什么的seo最新快速排名
  • 网站标题关键优化网络营销代运营外包公司
  • 罗山网站建设seo网络推广优化
  • 如何在eclipse上做网站网站链接查询
  • 企业网站如何设计网页直通车推广计划方案
  • 简单的购物网站设计seo网络推广知识
  • 做众筹的网站关键词网站推广
  • 做网站 页面自适应渠道推广
  • 广东企业网站建设策划高端网站设计公司