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://www.hqwc.cn/news/544706.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣每日一题 矩阵中移动的最大次数 DP

Problem: 2684. 矩阵中移动的最大次数 复杂度 ⏰ 时间复杂度: O ( n m ) O(nm) O(nm) &#x1f30e; 空间复杂度: O ( n m ) O(nm) O(nm) Code class Solution { public int maxMoves(int[][] grid){int n grid.length;int m grid[0].length;int[][] f new int[n][m]…

java中的对象克隆(深、浅) 和 类与类之间的关系

对象克隆&#xff1a; 将一个对象进行复制&#xff08;对象的内容相同&#xff09;&#xff0c;开辟新的内存地址。 浅克隆&#xff1a; 关联对象只是进行地址引用&#xff0c;并没有创建新的对象&#xff0c;只将关联对象的地址指向原始引用对象。 深克隆&#xff1a; 关联对…

SQL的执行与优化

文章目录 MySQL查询原理与优化一、select语句的执行顺序二、join 的执行与优化1、驱动表 & 被驱动表2、Simple Nested Loop Join3、Index Nested Loop Join4、Block Nested Loop Join5、Hash Join6、join 优化小结 三、on 与 where 对比四、group by 的执行与优化1、group …

订阅OnlyFans攻略

在数字化的今天&#xff0c;社交媒体平台已经成为我们生活中的一部分。其中&#xff0c;OnlyFans以其独特的内容和用户群体&#xff0c;吸引了大量创作者的加入。而Wildcard&#xff0c;作为一种便捷的支付工具&#xff0c;与OnlyFans的结合更是为创作者和粉丝带来了前所未有的…

监视和内存观察

监视和内存观察 5.监视和内存观察5.1 监视5.2 内存 5.监视和内存观察 在调试的过程中我们&#xff0c;如果要观察代码执行过程中&#xff0c;上下文环境中的变量的值&#xff0c;有哪些方法呢&#xff1f; 这些观察的前提条件一定是开始调试后观察&#xff0c;比如&#xff1…

NVENC 视频编码器 API 编程指南 ( 中文转译 )

基于 NVIDIA Kepler™ 和更高版本 GPU 架构的 NVIDIA GPU 包含基于硬件的 H.264/HEVC/AV1 视频编码器&#xff08;以下简称 NVENC&#xff09;。NVENC 硬件采用 YUV/RGB 作为输入&#xff0c;并生成符合H.264/HEVC/AV1 标准的视频比特流。可以使用 NVIDIA 视频编解码器 SDK 中提…

【Qt问题】vs里直接打开qt项目的ui会崩溃

问题描述&#xff1a; 当我用VS2019开发Qt的时候&#xff0c;在VS编译器里要用到Qt的ui设计&#xff0c;但是双击打开发现直接就崩溃了。 解决办法&#xff1a; 崩溃的原因很简单&#xff0c;是因为VS默认用的qt designer打开&#xff0c;所以会崩溃&#xff0c;我们右键单击…

智慧城市与数字孪生:共创未来城市的智慧生活

目录 一、智慧城市与数字孪生的概念与特点 二、智慧城市与数字孪生共创智慧生活的路径 1、城市规划与建设的智能化 2、城市管理与服务的智慧化 3、城市安全与应急管理的智能化 三、智慧城市与数字孪生面临的挑战与对策 四、智慧城市与数字孪生的发展趋势与展望 1、技术…

macOS系统中通过brew安装MongoDB

Macos 修改目录权限&#xff1a; sudo chmod -R 777 你的文件夹 本文使用homebrew进行安装简单&#xff0c;因为从官网下载安装包并手动安装需要移动安装包到合适的目录下并配置环境变量等一大堆操作后才能使用数据库&#xff08;若没有安装过brew请自行百度进行安装brew&am…

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…

jvm 内存泄露、内存溢出、栈溢出区别

JVM&#xff08;Java虚拟机&#xff09;是负责执行Java程序的运行环境。以下是对内存泄露、内存溢出和栈溢出这几个概念的解释&#xff1a; 内存泄露&#xff08;Memory Leak&#xff09;&#xff1a; 内存泄露指的是程序中分配的内存空间在不再被使用时没有被释放的情况。这可…

Visual Studio配置libtorch(cuda安装一步到位)

Visual Studio配置libtorch visual Studio安装cuDNN安装CUDAToolkit安装libtorch下载Visual Studio配置libtorch(cuda版本配置) visual Studio安装 visual Studio点击安装 具体的安装和配置过程这里就不进行细讲了&#xff0c;可以参考我这篇博客Visual Studio配置OpenCV(保姆…