springboot文件上传下载实战 ——文件上传、下载、在线打开、删除(1)

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

麻烦帮忙转发一下这篇文章+关注我

就这一次!拼多多内部架构师培训Kafka源码笔记(现已绝版)

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

String date = new SimpleDateFormat(“yyyy-MM-dd”).format(new Date());

String dateDirPath = realPath + “/” + date;

File dateDir = new File(dateDirPath);

if (!dateDir.exists()) dateDir.mkdirs();

// 处理文件上传

aaa.transferTo(new File(dateDir, newFileName));

// 将文件信息放入数据库

UserFile userFile = new UserFile();

userFile.setOldFileName(oldFileName).setNewFileName(newFileName).

setExt(extension).setSize(String.valueOf(size)).setType(type).

setPath(“/files/” + date).setUserId(user.getId());

System.out.println(userFile);

userFileService.save(userFile);

return “redirect:/file/showAll”;

}

文件上传测试


之前我们完成了展示所有文件功能,但是由于数据库中没有数据,因此显示的页面为空,现在我们利用文件上传功能往数据库中添加数据。

在这里插入图片描述

点击 选择文件,选择电脑上的任意文件,然后点击 上传文件

点击上传文件后页面自动再次跳到显示所有页面,此时可以看到页面上已经有数据了。

在这里插入图片描述

文件下载与在线打开

============================================================================

com.yusael.dao 包下:UserFileDAO.java 接口中增加一个方法:

// 根据id找到文件信息

UserFile findById(Integer id);

// 更新下载次数

void update(UserFile userFile);

resources/com/yusael/mapper 目录下:UserFileDAOMapper.xml 中增加代码:

select id,oldFileName,newFileName,ext,path,size,type,isImg,downcounts,uploadTime,userId

from t_files

where id = #{id}

update t_files set downcounts = #{downcounts} where id = #{id}


com.yusael.service 包下:UserFileService.java 接口中增加方法:

UserFile findById(Integer id);

void update(UserFile userFile);

com.yusael.service 包下:UserFileServiceImpl.java 实现类中增加代码:

@Override

public UserFile findById(Integer id) {

return userFileDAO.findById(id);

}

@Override

public void update(UserFile userFile) {

userFileDAO.update(userFile);

}


文件下载、在线打开核心 UserFileController


com.yusael.controller 包下:UserFileController.java 中增加方法:

// 文件下载

@GetMapping(“/download”)

public void download(Integer id, String openStyle, HttpServletResponse response) throws IOException {

// attachement是以附件形式下载, inline是在线打开

openStyle = “inline”.equals(openStyle) ? “inline” : “attachment”;

// 获取文件信息

UserFile userFile = userFileService.findById(id);

if (“attachment”.equals(openStyle)) {

// 更新下载次数

userFile.setDowncounts(userFile.getDowncounts() + 1); // 下载次数+1

userFileService.update(userFile);

}

// 根据 文件信息中文件名字 和 文件存储路径 获取文件真实路径

String realPath = ResourceUtils.getURL(“classpath:”).getPath() + “/static” + userFile.getPath();

// 获取文件输入流

InputStream is = new FileInputStream(new File(realPath, userFile.getNewFileName()));

// 获取响应输出流

response.setHeader(“content-disposition”, openStyle + “;fileName=” + URLEncoder.encode(userFile.getOldFileName(), “UTF-8”));

ServletOutputStream os = response.getOutputStream();

// 文件拷贝

IOUtils.copy(is, os);

IOUtils.closeQuietly(is);

IOUtils.closeQuietly(os);

}

文件下载、在线打开测试


前面我们已经完成了文件的上传功能,经过上传了图片,现在数据库中已经有了几张图片信息,我们点击下载,可以跳出下载界面,并且文件的下载次数会 + 1。

在这里插入图片描述

点击在线打开,如果是图片格式的文件,则会直接打开,否则依旧是以附件的形式下载,但是不增加下次次数。

在这里插入图片描述

文件删除

=======================================================================

com.yusael.dao 包下:UserFileDAO.java 接口中增加一个方法:

// 删除数据库中的文件

void delete(Integer id);

resources/com/yusael/mapper 目录下:UserFileDAOMapper.xml 中增加代码:

delete from t_files

where id = #{id}


com.yusael.service 包下:UserFileService.java 接口中增加方法:

void delete(Integer id);

com.yusael.service 包下:UserFileServiceImpl.java 实现类中增加代码:

@Override

public void delete(Integer id) {

userFileDAO.delete(id);

}


com.yusae.controller 包下:UserFileController.java 中增加方法:

// 文件删除

@GetMapping(“/delete”)

public String delete(Integer id) throws FileNotFoundException {

最后

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!

我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:

Dubbo面试专题

JVM面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Java并发面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Kafka面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MongDB面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MyBatis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MySQL面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Netty面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

RabbitMQ面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Redis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Spring Cloud面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

SpringBoot面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

zookeeper面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

常见面试算法题汇总专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

计算机网络基础专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

设计模式专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

fE-1715468288233)]

常见面试算法题汇总专题

[外链图片转存中…(img-wBFxxUMM-1715468288233)]

计算机网络基础专题

[外链图片转存中…(img-KyurV881-1715468288233)]

设计模式专题

[外链图片转存中…(img-MkRYvxXV-1715468288235)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值