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

SpringBoot 上传文件示例

示例效果:

前端代码:

<html>
<head><title>上传文件示例</title></head>
<body>
<h2>方式一:普通表单上传</h2>
<form action="/admin/upload" method="post" enctype="multipart/form-data"><input type="file" name="file"/><input type="submit" value="文件上传"/>
</form>
<h2>方式二:fetch异步上传</h2>
<input type="file" id="fileInput"/>
<script type="text/javascript">const fileInput = document.getElementById('fileInput');// 当文件被选中时上传文件fileInput.addEventListener('change', function (e) {const file = e.target.files[0];const formData = new FormData();formData.append('file', file);fetch('/admin/upload', {method: 'POST',body: formData}).then(response => response.json()) // 如果API返回JSON,解析它.then(data => {document.getElementById('fileInput').value = "";alert(JSON.stringify(data));}) // 处理解析后的数据.catch(error => console.error('Error:', error)); // 处理错误});
</script>
<h2>方式三:文件和文本一起提交</h2>
<input type="text" id="text"><br/>
<input type="file" id="file"/>
<input type="button" value="提交" onclick="submitForm()">
<script type="text/javascript">function submitForm() {const text = document.getElementById('text').value;const file = document.getElementById('file').files[0];const formData = new FormData();formData.append('text', text);formData.append('file', file);fetch('/admin/upload', {method: 'POST',body: formData}).then(response => response.json()).then(data => {alert(JSON.stringify(data));});}
</script>
</body>
</html>

后台代码

 @RequestMapping(value = "/upload", method = RequestMethod.POST)@ResponseBodypublic String upload(@RequestParam("file") MultipartFile file, @RequestParam(value = "text", required = false) String text) {//文件保存路径为在D盘下的upload文件夹,可以按照自己的习惯修改String FILE_UPLOAD_PATH = "D:\\upload\\";//如果目录不存在,则创建目录Path path = Paths.get(FILE_UPLOAD_PATH);if (!Files.exists(path)) {try {Files.createDirectories(path);} catch (IOException e) {e.printStackTrace();}}if (file.isEmpty()) {return "文件上传失败";}String fileName = file.getOriginalFilename();String suffixName = fileName.substring(fileName.lastIndexOf("."));//生成文件名称通用方法SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");Random r = new Random();StringBuilder tempName = new StringBuilder();tempName.append(sdf.format(new Date())).append(r.nextInt(100)).append(suffixName);String newFileName = tempName.toString();try {//保存文件byte[] bytes = file.getBytes();Path filePath = Paths.get(FILE_UPLOAD_PATH + newFileName);Files.write(filePath, bytes);} catch (IOException e) {e.printStackTrace();}var res = new JSONObject();res.put("flag", true);res.put("body", "上传成功");res.put("text", text);return res.toString();}

此处仅演示如何实现简单的文件上传,实际环境中,还需做相应的身份认证,权限控制等。

http://www.lryc.cn/news/355124.html

相关文章:

  • 9.js函数
  • 关于数据库和数据表的基础SQL
  • 【C语言深度解剖】(14):结构体内存对齐(详细配图讲解)
  • 学习笔记:C语言的32个关键字
  • 嵌入式学习 (Day:27 IPC --- 进程间通信)
  • Python考试复习--day2
  • 整理好了!2024年最常见 20 道 Redis面试题(九)
  • IDEA使用Maven打包项目的所有的依赖
  • 【C++ 】学习问题及补充
  • 内存泄漏案例分享3-view的内存泄漏
  • 红外超声波雷达测距
  • AIGC 008-IP-Adapter文本兼容图像提示适配器用于文本到图像扩散模型
  • Java入门基础学习笔记50——ATM系统
  • # linux 中使用 visudo 命令,怎么保存退出?
  • springboot项目,@Test写法 @Before @After
  • vue3的核心API功能:computed()API使用
  • Bootstrap5
  • 宝塔部署纯Vue项目,无后端
  • spring boot3整合邮件服务实现邮件发送功能
  • 算法刷题day54:搜索(一)
  • 深入了解Redis的过期策略和内存淘汰机制
  • 小白不知道怎么投稿?记住这个好方法
  • gRPC - Protocol Buffer 编译器安装
  • 【Linux】centos7下载安装Python3.10,下载安装openssl1.1.1
  • 通过 python 操作mongodb
  • 若依框架对于后端返回异常后怎么处理?
  • vs code怎么补全路径,怎么快捷输入文件路径
  • git分支开发主干合并流程
  • 01Python相关基础学习
  • InTouch历史报警、历史事件按时段查询,导出