热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springboot6==springboot前后端分离demo,图片前端上传,后端下载保存到本机

参考地址:How2J的Java教程How2J的Java教程,内容涵盖J2SE、WEB前端、J2EE、框架技术等全面的Java内容。基于实例代码和视频讲解的学习方式为J

参考地址:How2J 的 Java教程How2J的Java教程, 内容涵盖J2SE、WEB前端、J2EE、框架技术等全面的Java内容。 基于实例代码和视频讲解的学习方式为Java职业生涯打下坚实的基础

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

2、前端页面

需要引入vue和elementUI和axios,上官网下载即可。

















3、Controller层DemoUpladDownLoadImg.java

package com.ldj.reggie.controller.demoUpload;import com.ldj.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.UUID;/*** 测试图片文件上传下载*/
@RestController
@RequestMapping("/common")
@Slf4j
public class DemoUpladDownLoadImg {@Value("${basePath}")private String basePath;/*** @param file 参数名字必须写这个file* @return*/@PostMapping("/upload")public R upLoadImg(MultipartFile file) {//debug到这。当前是存在C盘的一个临时文件log.info(file.toString());String originalFilename = file.getOriginalFilename();//得到后缀名int i = originalFilename.lastIndexOf(".");String substring = originalFilename.substring(i);//生成新文件名String fileNewName = UUID.randomUUID().toString() + substring;//转存到图片指定位置,位置在项目配置文件yml中指定//判断存放图片的目录是否存在,不存在就创建File dir = new File(basePath);if (!dir.exists()) {dir.mkdirs();}//存放在本机的文件名+后缀File dest = new File(basePath + fileNewName);try {log.info("图片存放地址:" + basePath + fileNewName);file.transferTo(dest);} catch (IOException e) {e.printStackTrace();}return R.success(fileNewName);}@GetMapping("/download")public void downLoadImg(@RequestParam String name, HttpServletResponse response) {log.info("想要的图片名字{}", name);FileInputStream fileInputStream = null;ServletOutputStream outputStream = null;File file = new File(basePath + name);try {//输入流读取本机图片fileInputStream = new FileInputStream(file);response.setContentType("image/jpeg");outputStream = response.getOutputStream();int len = 0;byte[] bytes = new byte[1024];while ((len = fileInputStream.read(bytes)) != -1) {outputStream.write(bytes, 0, len);outputStream.flush();}} catch (Exception e) {e.printStackTrace();} finally {try {assert outputStream != null;outputStream.close();fileInputStream.close();} catch (Exception e) {e.printStackTrace();}}}
}

4、在配置文件中指定保存路径

basePath: D:\\

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

5、访问

http://localhost:8080/backend/page/demoUpload/upload.html

6、选择选择一张图片,成功上传到本机的D盘。 

 

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

总结:

springboot的文件上传下载是基于Apache 基金会下面的一个子项目,子项目叫做commons,这个子项目中用于文件上传下载的包是commons-upload,然后commons-upload又基于commons-io。这些都集成在starter中了。 

文件先是被临时存储在C盘,可以通过debug查看

后端必须使用file作为对象名:MultipartFile file,因为前端页面使用elementUI以表单方式上传图片的时候,自动给这个流取了个名叫file。当然也可以通过其他注解修改对象名。


推荐阅读
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 像跟踪分布式服务调用那样跟踪Go函数调用链 | Gopher Daily (2020.12.07) ʕ◔ϖ◔ʔ
    每日一谚:“Acacheisjustamemoryleakyouhaven’tmetyet.”—Mr.RogersGo技术专栏“改善Go语⾔编程质量的50个有效实践” ... [详细]
author-avatar
hustjs
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有