记录一下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. tar基本命令

    常用基本命令 压缩文件 # touch a.txt # tar -czvf test.tar.gz a.txt  //或  tar -czvf /path/to/file.tar.gz file 列出 ...

  2. Linux中如何将txt文件转为png格式

    Linux中如何将txt文件转为png格式 linux将txt文件转为png格式如果文本中没有中文,使用enscript,如果文本包含中文,使用paps命令.但是实际使用中,paps部分版本也不支持中 ...

  3. mysql常用优化

    SQL优化是一个分析,优化,再分析,再优化的过程.站在执行计划的角度来说,我们这个过程,就是在不断的减少rows的数量. 1.建索引 2.减少表之间的关联 3.优化 sql,尽量让 sql 很快定位数 ...

  4. Docker - 部署禅道

    原文链接:https://mp.weixin.qq.com/s/8L0Rv6Wc0lFsQU6Lw0QloQ   简单的看了一下原文,他使用的是Ubuntu的操作系统,第一步的Docker安装相关命令 ...

  5. Linux - 配置服务器之间SSH免密登录

    如果集群中服务器之间没有配置SSH免密,那么SSH访问其他服务器时就需要输入密码 一般都要设置密码强口令,又长又难记,就想配置一下SSH免密. 一.生成公钥和私钥 在ctos79-01执行如下命令,公 ...

  6. 大数据之路Week10_day07 (JavaAPI 操作Redis 与Hbase建立索引,通过查询redis中的索引查询Hbase数据)

    在这里是简单模拟将索引存到redis中,再通过先查询索引再将Hbase中的数据查询出来. 需要考虑的问题: 1.建立redis的连接,建立Hbase的连接 2.如何创建索引,即创建索引的key和val ...

  7. 机器学习 | 强化学习(6) | 策略梯度方法(Policy Gradient Method)

    6-策略梯度方法(Policy Gradient Method) 策略梯度概论(Introduction) 基于策略(Policy-Based) 的强化学习 对于上一节课(价值函数拟合)中采用参数\( ...

  8. 读论文-基于序列_会话的推荐_挑战,方法,应用和机遇(Sequential_Session-based Recommendations_ Challenges, Approaches, Applications and Opportunities)

    前言 今天读的论文为一篇于2022年7月7日发表在第45届国际ACM信息检索研究与发展会议论文集(Proceedings of the 45th International ACM SIGIR Con ...

  9. sap 管理--企业解决方案 -设备管理

    1.什么是sap 管理 2.设备管理管的是什么 3.设备的几种状态 4.设备bom(物料清单) 5.测量点计数器 1.什么是sap 管理 System Applications and Product ...

  10. xpath 定位单选框

    分析页面结构: 整个页面只有一组radiogroup 一个group地下存在两个radio 思路定位到页面唯一元素->下面具体radio 代码: //div[@class='el-radio-g ...