当前位置:   article > 正文

【RuoYi】实现文件的上传与下载_ruoyi 文件下载

ruoyi 文件下载

一、前言

   首先,最近在做一个管理系统,里面刚好需要用到echarts图和富文本编辑器,然后我自己去看了官网觉得有点不好懂,于是去B站看来很多视频,然后看到了up主【程序员青戈】的视频,看了他讲的echarts图和富文本编辑器部分的内容,觉得讲的很好,很推荐大家去观看他的视频。然后在富文本编辑器这部分内容中,需要用到,文件上传与下载的部分知识,所以这里做一个笔记,来记录关于这部得分的内容,echarts图和富文本编辑器部分的内容也会在后面的博客中介绍。希望对大家有所帮助啦~

二、准备工作

   导入hutool的依赖

  1. <!--hutool工具类-->
  2. <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
  3. <dependency>
  4. <groupId>cn.hutool</groupId>
  5. <artifactId>hutool-all</artifactId>
  6. <version>5.8.25</version>
  7. </dependency>

三、文件上传与下载代码

   如下所示,是跟着青戈学的已经封装好的代码,大家可以直接拿来用。但是需要注意的是,我用的是RuoYi的框架,所以最后返回的是RuoYi封装好的AjaxResult结果集,而不是青戈自己写的Result结果集,就这里需要注意以下。

  1. @RestController
  2. @Api(tags = "文件上传与下载模块")
  3. @RequestMapping("/file")
  4. public class FileController extends BaseController {
  5. @Value("${ip:localhost}")
  6. String ip;//通过配置文件拿到ip
  7. @Value("${server.port}")
  8. String port;
  9. private static final String ROOT_PATH = System.getProperty("user.dir")+ File.separator+"files";//文件根目录
  10. @ApiOperation(value = "文件上传")
  11. @PostMapping("/upload")
  12. public AjaxResult Upload(@RequestPart("file") MultipartFile file) throws IOException {//MultipartFile file 输入的文件
  13. String originalFilename = file.getOriginalFilename();//originalFilename是获取源文件名
  14. String mainName = FileUtil.mainName(originalFilename);// mainName 是主文件名
  15. String extName = FileUtil.extName(originalFilename);//extName 是文件的标识 png、pdf等
  16. if(!FileUtil.exist(ROOT_PATH)){//通过hutool工具类中的FileUtil来判断我们的根目录是否存在,若不存在则在根目录下创建file文件夹
  17. FileUtil.mkdir(ROOT_PATH);
  18. }
  19. //判断file文件夹中传入的文件是否存在,若存在为了防止重名不被替换,则需要对文件重新命名
  20. if(FileUtil.exist(ROOT_PATH+File.separator+originalFilename)){
  21. originalFilename=System.currentTimeMillis()+"_"+mainName+"."+extName;
  22. }
  23. File saveFile = new File(ROOT_PATH + File.separator + originalFilename);//创建一个file文件对象,方便写入磁盘
  24. file.transferTo(saveFile);//存储文件到本地磁盘里面去
  25. String url ="http://"+ip+":"+port+"/file/download/"+originalFilename;//问价下载的路径
  26. return AjaxResult.success(url);//RuoYi自带的结果集
  27. }
  28. @ApiOperation(value = "文件下载")
  29. @GetMapping("/download/{fileName}")
  30. public void download(@PathVariable String fileName, HttpServletResponse response) throws IOException {
  31. // response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));//文件下载
  32. response.addHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(fileName,"UTF-8"));//文件预览
  33. String filePath = ROOT_PATH+File.separator+fileName;//拿到文件的路径
  34. if(!FileUtil.exist(filePath)){//文件不存在,就不用管,因为没有东西可写
  35. return;
  36. }
  37. byte[] bytes = FileUtil.readBytes(filePath);//使用FileUtil从filePath中去读取文件
  38. ServletOutputStream outputStream = response.getOutputStream();
  39. outputStream.write(bytes);//把文件的字节数写出去
  40. outputStream.flush();//刷新一下
  41. outputStream.close();//一定要关闭文件流
  42. }
  43. }

接口测试

我们在测试接口时,可以直接使用RuoYi框架为我们提供的Swagger来测试接口,当然也可以用PostMan,看个人的习惯来定了。

bbe54ea0ff974437a3f132f5fe6e4682.png

a6711e0d31e147cba7d4d9d88e5f4805.png

8a7c4224decc43f6beff175d7cbf0dc1.png

文件上传成功返回码为200,而且在Idea中生成file文件夹

1242212e892b4a4c9a311d464e4791e0.png

57a9f1faf2304ae78ca45bd3552d37e3.png

到此我们的文件上传与下载的接口就完成了,接下来我们来看看如何在前端使用我们的该功能。

四、实践

①单文件上传

da561baecfeb49de9762768906024a99.png

如上图所示,我们现在要完成一个点击功能,从而实现用户头像的上传与显示,这个功能也是我们在做项目中很常见的功能。

思路:上传图片->保存数据库->再从数据库拿到图片路径

先完成文件的上传:

05f047e215dc457885107c79fd926ed3.png

注意:我们使用的是RuoYi框架中的AjaxResult结果集,返回的数据是在response下的msg中

bf68590f7fa04edfa67326fb10bbb101.png

JS中代码

  1. handleTableFileUpload(row,file,fileList){
  2. console.log(row,file)
  3. row.stuAvatar=file.response.msg//注意我们使用的是RuoYi框架中的AjaxResult结果集,返回的数据是在response下的msg中
  4. //触发更新
  5. //使用RuoYi中封装好的updateStudent()函数,将当前对象更新
  6. updateStudent(row).then(response => {
  7. if(response.code=='200'){
  8. this.$message.success("上传成功")
  9. }else{
  10. this.$message.success("上传失败")
  11. }
  12. this.form = response.data;
  13. });
  14. }

头像显示代码:

7cd6da79d60a4fc694edec61a9fa41d0.png

效果如下:

8fa802193bf14a8e9bcc4058517616ad.png

②多文件上传

多文件其实是基于单文件的,就是在单文件的基础上,多次请求即可。我们也可以做个简单的案例测试。先在element-ui随便找一个文件上传的前端页面,如下图所示:

b15d1a2133634dcc904d108af8057a05.png

放在我们的RuoYi的项目中:

2a01bafe498047b691df4e098c9116ee.png

400e8f62200e4730ad4d25a0ffc7bcc0.png

12b6eeabdec94234bd1b3455f7c98009.png

测试:

74b57ed4df6f43ed9b7d584848596aff.png

a4c3d68d69704cc4aed5f279629a5995.png

如上图所示,我们可以成功的拿到三张图片的地址,此时我们只需要,将其存入数据库,再从数据库中拿出来显示即可,大家下来试一试即可,我这里就不做测试了。

五、总结

   跟着青戈学习了这个文件上传与下载的的视频,自己真的学到了很多,这个文件上传下载的功能不仅适用于图片,也可以用在pdf、word等文件中,也希望这些内可以帮助屏幕前的小伙伴们,如果有所帮助,别忘了点赞、关注一波哦~

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/769311
推荐阅读
相关标签
  

闽ICP备14008679号