记录一下java实现文件的上传、下载、删除的功能demo;

/**
* Controller
*/
@Slf4j
@RestController
@RequestMapping
public class FileController { @Resource
IFileService fileService; /**
* 文件上传
*
* @param file
*/
@RequestMapping("/uploadFile")
public void uploadFile(@RequestParam(value = "file") List<MultipartFile> list) {
//参数校验
if (list == null || list.isEmpty()) {
log.error("uploadFile 接口,参数文件列表为空");
return ;
}
//上传文件
return fileService.uploadFile(list);
} /**
* 文件下载
*
* @param id
* @param fileName
*/
@RequestMapping(value = "/downloadFile")
@ResponseBody
public void downloadFile(@RequestParam("fileName") String fileName) {
if (StringUtils.isBlank(fileName)) {
log.error("fileName 都不能为空");
return ;
}
try {
fileService.downloadFile(id, fileName);
} catch (Exception e) {
log.error("文件下载异常", e);
return ;
}
}
/**
* 文件删除
*
* @param fileName
*/
@RequestMapping(value = "/delFile")
@ResponseBody
public void delFile(@RequestParam("fileName") String fileName) {
if (StringUtils.isBlank(fileName)) {
log.error("fileName 不能为空");
return ;
}
fileService.delFile(fileName);
}
}
/**
* 相关service
*/
public interface IFileService {
/**
* 上传文件
*
* @param list
*/
void uploadFile(List<MultipartFile> list); /**
* 下载文件
*
* @param fileName
* @throws Exception
*/
void downloadFile(String fileName) throws Exception; /**
* 删除文件
*
* @param fileName
*/
void delFile( String fileName);
}
/**
* service实现
*/
@Slf4j
@Service
public class FileServiceImpl implements IFileService { @Value("${filePath}")
private String fileDir;//文件目录 @Override
public void uploadFile(List<MultipartFile> list) {
String path = fileDir;
for (MultipartFile file : list) {
//文件夹不存在,就创建
File filePath = new File(path);
if (!filePath.exists()) {
filePath.mkdirs();
}
//获取 文件名
String fileName = file.getOriginalFilename();
//获取文件大小,单位kb
long fileSize = file.getSize() / 1024;
//写文件
try {
File file2 = new File(path, fileName);
OutputStream out = new FileOutputStream(file2);
byte[] bytes = file.getBytes();
out.write(bytes);
out.close();
} catch (IOException e) {
log.error("文件上传出现异常", e);
e.printStackTrace();
}
}
} @Override
public void downloadFile(String fileName) throws Exception {
String filePath = fileDir + File.separator + fileName;
//得到要下载的文件
File file = new File(filePath);
//如果文件不存在
if (!file.exists()) {
log.error("目录或文件不存在,{}_{}", file.getPath(), file.getName());
return ;
}
//处理文件名
String realname = fileName.substring(fileName.indexOf("_") + 1);
//设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(realname, "UTF-8"));
//读取要下载的文件,保存到文件输入流
FileInputStream in = new FileInputStream(filePath);
//创建输出流
OutputStream out = response.getOutputStream();
//创建缓冲区
byte[] buffer = new byte[1024];
int len = 0;
//循环将输入流中的内容读取到缓冲区当中
while ((len = in.read(buffer)) > 0) {
//输出缓冲区的内容到浏览器,实现文件下载
out.write(buffer, 0, len);
}
//关闭文件输入流
in.close();
//关闭输出流
out.close();
} @Override
public void delFile(String fileName) {
//拼接filePath
String filePath = fileDir + File.separator + fileName;
File file = new File(filePath);
// 判断文件是否存在
if (!file.exists() || !file.isFile()) {
log.error("文件不存在,{}_{}", file.getPath(), file.getName());
return ;
}
Boolean delFlag = deleteFile(file);
//打印删除状态
log.info("文件:{},删除状态:{}", fileName, delFlag);
} /**
* 删除单个文件
*
* @param file 被删除的文件
* @return 单个文件删除成功返回true,否则返回false
*/
public boolean deleteFile(File file) {
boolean flag = false;
// 文件且不为空,则进行删除
if (file.isFile() && file.exists()) {
flag = file.delete();
}
return flag;
}
}

java——文件的上传、下载、删除操作DEMO的更多相关文章

  1. java文件夹上传下载组件

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  2. java文件夹上传下载控件分享

    用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个需要在JAVA.MyEclipse环境下大文件上传的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下 ...

  3. java文件断点续传上传下载解决方案

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  4. java操作FTP,实现文件上传下载删除操作

    上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端 ...

  5. JAVA 文件的上传下载

    一.上传文件 1.使用 transferTo 上传 @ResponseBody @RequestMapping(value = "/file/upload") public Res ...

  6. JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)

    package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...

  7. JAVAWEB之文件的上传下载

    文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将 ...

  8. python使用ftplib模块实现FTP文件的上传下载

    python已经默认安装了ftplib模块,用其中的FTP类可以实现FTP文件的上传下载 FTP文件上传下载 # coding:utf8 from ftplib import FTP def uplo ...

  9. 使用Fileupload完成文件的上传下载

    目录 使用Fileupload完成文件的上传下载 为什么需要进行文件上传下载? 引入jar包 文件上传 注意事项 编写一个简单的文件上传jsp页面 编写Servlet Student类用于封装数据,后 ...

  10. linux链接及文件互相上传下载

    若排版紊乱可查看我的个人博客原文地址 基本操作 本篇博客主要介绍如何去链接远程的linux主机及如何实现本地与远程主机之间文件的上传下载操作,下面的linux系统是CentOS6.6 链接远程linu ...

随机推荐

  1. MongoDB:集群和安全

    MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务. 副本集可提供冗余和高可用性,是所有生产部署的基础.也可以说,副本集类似于有自动故障恢复功能的主从集群.通俗的 ...

  2. 一镜到底,通过Llama大模型架构图看透transformers原理

    一镜到底,通过Llama大模型架构图看透transformers原理 Llama Nuts and Bolts是Github上使用Go语言从零重写Llama3.1 8B-Instruct模型推理过程( ...

  3. Luogu P3899 湖南集训 更为厉害 题解 [ 紫 ] [ 可持久化线段树 ] [ dfs 序 ] [ 线段树合并 ]

    更为厉害:可持久化做法有点意思,但线段树合并做法就很无脑了. 线段树合并做法 显然有三种 \(b\) 的位置的分类讨论. 当 \(b\) 为 \(a\) 的祖先时 从祖先里选 \(b\),从儿子里选 ...

  4. 理解 SystemVerilog 中的循环与并发线程

    1. 首先理解 scope 的概念 除了常见的module.interface.class.task以及function等等,另外,begin-end block 和 fork-join block ...

  5. [NOIP2018] 旅行 题解

    明显要以 \(1\) 为起点. 原图是树 这种情况下,走路不能回头,只能用 \(dfs\) 的思路走.当然肯定每次都走较小的那棵子树,\(vector\) 存图后排序即可达到这种效果. 时间复杂度 \ ...

  6. 2. MySQL的数据目录(详解讲解)

    2. MySQL的数据目录(详解讲解) @ 目录 2. MySQL的数据目录(详解讲解) 1. MySQL8 的主要目录结构 1.1 相关命令目录 1.2 配置文件目录 2. 数据库和文件系统的关系 ...

  7. QT5笔记:1.UI文件设计与运行机制

    1.UI文件设计与运行机制 参考视频:https://www.bilibili.com/video/BV1AX4y1w7Nt #include "widget.h" #includ ...

  8. Scala重写构造函数

    package com.wyh.scala.classData object Demo4Class { def main(args: Array[String]): Unit = { val stu ...

  9. luogu-P10596题解

    简要题意 一个有 \(N\) 个元素的集合有 \(2N\) 个不同子集(包含空集),现在要在这 \(2N\) 个集合中取出若干集合(至少一个),使得它们的交集的元素个数为 \(K\),求取法的方案数, ...

  10. Springboot 全局统一处理异常

    import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind ...