java上传和下载文件使用教程

文章目录

  • 前言
  • 一、引入库
  • 二、上传文件
    • 1.前台
    • 2.后台
    • 3.测试
  • 三、下载文件(chrome)
    • 1.前台
    • 2.后台
    • 3.测试
  • 总结


前言

本篇文章介绍java中文件的上传和下载,亲测可用,所用案例为springboot项目。


一、引入库

<!-- SpringBoot Web容器 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

在这里插入图片描述

二、上传文件

1.前台

<!-- 上传start-->
<div class="nest"><div class="title-alt"><h6>上传文件</h6></div><div class="body-nest"><div id="upload" width="120px" height="120px" background-color="black"><form id="uploadForm" action="/file/upload" method="post" enctype="multipart/form-data"><input type="file" name="file"><button type="submit" class="btn btn-primary" style="margin-top: 5px;"><span class="entypo-plus-squared"></span>&nbsp;&nbsp;上传</button></form></div></div>
</div>
</div>
<!-- 上传end -->

2.后台

package com.student.controller;import com.student.sys.common.domain.AjaxResult;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;/*** Create by zjg on 2024/3/16*/
@Controller
@RequestMapping("file/")
public class StudentFileController {/*** 文件上传功能* @param file* @return* @throws IOException*/@PostMapping("upload")@ResponseBodypublic  AjaxResult upload(@RequestParam("file") MultipartFile file) throws IOException {String root = System.getProperty("user.dir");// 文件名String fileName = root+File.separator+"file/upload"+File.separator+file.getOriginalFilename();System.out.println(fileName);File dest = new File(fileName);// 判断目标文件所在目录是否存在if(!dest.getParentFile().exists()) {// 如果目标文件所在的目录不存在,则创建父目录dest.getParentFile().mkdirs();}// 将内存中的数据写入磁盘file.transferTo(dest);return AjaxResult.success();}
}

3.测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、下载文件(chrome)

1.前台

<!-- 下载start-->
<div class="nest" id="Blank_PageClose"><div class="title-alt"><h6>下载文件</h6></div><div class="body-nest" id="Blank_Page_Content"><div id="download" width="120px" height="120px" background-color="black"><form id="downloadForm" action="/file/download" method="get"><input type="text" name="fileName" class="download-input"><button type="submit" class="btn btn-info"><span class="entypo-trash"></span>&nbsp;&nbsp;下载</button></form></div></div></div><!-- 下载end -->

2.后台

package com.student.controller;import com.student.sys.common.domain.AjaxResult;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;/*** Create by zjg on 2024/3/16*/
@Controller
@RequestMapping("file/")
public class StudentFileController {/*** 文件下载功能* @param fileName* @throws Exception*/@GetMapping("/download")@ResponseBodypublic AjaxResult download(String fileName,HttpServletResponse response) throws Exception{String root = System.getProperty("user.dir");fileName=root+File.separator+"file/download"+File.separator+fileName;System.out.println(fileName);File file = new File(fileName);if(!file.exists()){return AjaxResult.error(404,"文件不存在");}//获取输入流InputStream bis = new BufferedInputStream(new FileInputStream(file));//转码,免得文件名中文乱码fileName = URLEncoder.encode(fileName,"UTF-8");//设置文件下载头response.addHeader("Content-Disposition", "attachment;filename=" + fileName);//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型response.setContentType("multipart/form-data");BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());int len = 0;while((len = bis.read()) != -1){out.write(len);out.flush();}out.close();return AjaxResult.success();}
}

3.测试

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


总结

回到顶部
而我受过的伤,就是我的勋章。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2869163.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Task-balanced distillation for object detection用于

Task-balanced distillation for object detection用于目标检测的任务平衡蒸馏 摘要 主流的目标检测器通常由分类和回归两个子任务组成&#xff0c;由两个并行头部实现。这种经典的设计范式不可避免的导致分类得分和定位质量&#xff08;IOU&#xff09;之间的空间分布不一致…

深入浅出计算机网络 day.3 第二章 物理层

一定要把你在意的东西看得淡一点&#xff0c;再淡一点&#xff0c;有些事情有些人&#xff0c;只要你不那么在乎了&#xff0c;就不会伤害到你 —— 24.3.16 2.1 物理层概述 01.物理层要实现的功能 02.物理层接口特性 一、物理层要实现的功能 物理层要实现的功能就是在各种传输…

自定义协议

应用层 有许多现成的协议(HTTP协议做网站必备),也有许多需要程序员自定义的协议. 1.自定义协议 自定义协议: 1.明确传递的信息是什么 2.约定好信息按照什么样的格式来组织成二进制字符串 举个例子: 当我们点外卖时,打开软件,会显示商家列表,列表中有很多项,每一项都包含了一…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Rating)

提供在给定范围内选择评分的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Rating(options?: { rating: number, indicator?: boolean }) 从API version 9开始&#…

HTTPS(超文本传输安全协议)工作过程

一、简述HTTPS HTTPS超文本传输协议&#xff08;全称&#xff1a;Hypertext Transfer Protocol Secure &#xff09;&#xff0c;是以安全为目标的 HTTP 通道&#xff0c;在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL&#x…

数据库——书籍+内容0.1版本

背景&#xff1a;将一本书&#xff0c;存入我们的数据库中&#xff0c;并可以查出来 采用&#xff1a;第三范式&#xff08;3NF&#xff09;设计模式 设计数据库模板 第一范式&#xff08;1NF&#xff09;&#xff1a;确保表的每一列都是不可分割的原子数据项。 第二范式&…

【分布式websocket 】前端vuex管理客户端消息crud!使用localStorage来存储【第19期】

前言 聊天系统客户端是要存储消息的&#xff0c;因为所有所有的历史消息都从服务器拉的话一方面服务器压力大&#xff0c;另一方面也耗费用户流量。所以客户端存储消息是势在必行的。如何存储呢上一篇文章也写了&#xff0c;大概就是浏览器的话是localStorage或者IndexedDB。然…

Docker 学习笔记一

一、什么是docker Docker 是一个基于轻量级虚拟化技术的容器&#xff0c;整个项目基于Go语言开发&#xff1b;Docker是一个C/S架构&#xff0c;后端众多模块各司其职&#xff0c;docker的daemon是运行在主机上通过client可以进行通信。 docker 由三部分组成&#xff1a;镜像(…

【第六章】简单网络实现手写数字分类-编程实现

前言 让我们编写一个程序&#xff0c;学习如何使用随机梯度下降和MNIST训练数据来识别手写数字。我们将通过一个简短的Python程序来实现这一点&#xff0c;只需要74行代码&#xff01;首先我们需要获取MNIST数据。 本章代码和数据下载地址&#xff1a; https://download.csdn.…

碳素光线疗法与中医

看得见的穴位碳素光线疗法 最近日本的医疗随着科学技术的发达&#xff0c;在基础研究、临床各领域取得了显著的发展。日本人的平均寿命比战前大幅延长&#xff0c;结核及其他疑难杂症、癌症等疾病也在逐渐被压制。其中&#xff0c;作为癌症的辅助疗法&#xff0c;日本癌症学会等…

【PyTorch】成功解决ModuleNotFoundError: No module named ‘torch’

【PyTorch】成功解决ModuleNotFoundError: No module named ‘torch’ &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希…

蓝桥杯单片机快速开发笔记——独立键盘

一、原理分析 二、思维导图 三、示例框架 #include "reg52.h" sbit S7 P3^0; sbit S6 P3^1; sbit S5 P3^2; sbit S4 P3^3; void ScanKeys(){if(S7 0){Delay(500);if(S7 0){while(S7 0);}}if(S6 0){Delay(500);if(S6 0){while(S6 0)…

Flink 集群部署模式

文章目录 前言一、会话模式&#xff08;Session Mode&#xff09;二、单作业模式&#xff08;Per-Job Mode&#xff09;三、应用模式&#xff08;Application Mode&#xff09; 前言 Flink支持多种集群部署模式&#xff0c;以满足不同场景和需求。以下是Flink的主要集群部署模…

Rust学习02:推荐一本入门书,免费的

都说Rust的学习曲线很陡峭&#xff0c;试过才知雀实不容易。 先说我的基础&#xff0c;非科班&#xff0c;自学Python&#xff0c;写过几个小程序。 我买书从来不扣扣嗖嗖的&#xff0c;所以先啃了几本Rust的入门书&#xff0c;包括&#xff1a; Tim McNamara的《Rust实战》&am…

javaEE——线程的等待和结束

文章目录 Thread 类及常见方法启动一个线程中断一个线程变量型中断调用 interrupt() 方法来通知观察标志位是否被清除 等待一个线程获取当前线程引用休眠当前线程 线程的状态观察线程的所有状态观察 1: 关注 NEW 、 RUNNABLE 、 TERMINATED 状态的切换 多线程带来的风险为什么会…

基于SpringBoot框架实现的B2B平台的医疗病历交互系统

采用技术 基于SpringBoot框架实现的B2B平台的医疗病历交互系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员角色 医院管理 医院注册 医院文…

pytorch 入门基础知识一(Pytorch 01)

一 深度学习基础相关 深度学习三个主要的方向&#xff1a;计算机视觉&#xff0c;自然语言&#xff0c;语音识别。 机器学习核心组件&#xff1a;1 数据集(data)&#xff0c;2 前向传播的model(net)&#xff0c;3 目标函数(loss)&#xff0c; 4 调整模型参数和优化函数的算法…

C#混淆心得

C#混淆心得 近期遇到混淆C#代码的需求&#xff0c;在网上找了很多办法&#xff0c;在此记录一下。 混淆的本质就是让代码变丑&#xff0c;让别人看不懂。 为什么要混淆&#xff1a; 1.保护核心代码 可以在一定程度上避免别人偷代码&#xff0c;从而保护重要的部分&#xf…

vscode jupyter 如何关闭声音

网上之前搜的zen模式失败 仅仅降低sound失败 #以下是成功方式&#xff1a; 首先确保user和remote的声音都是0&#xff1a; 然后把user和remote的以下设置都设置为off就行了&#xff01; 具体操作参考 https://stackoverflow.com/questions/54173462/how-to-turn-off-or-on-so…

传输层/UDP/TCP协议

再谈端口号 TCP/IP协议用“源IP”&#xff0c;“源端口号”&#xff0c;“目的IP”&#xff0c;“目的端口号”&#xff0c;“协议号”&#xff0c;这样一个五元组来标识一个通信&#xff08;可以用netstat -n来查看&#xff09;。 端口号的划分和知名端口号 我们之前就说过&am…