记录一下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. 联想服务器安装Centos8.3

    准备 1.服务器型号:ThinkSystem SR158 2.安装系统:Centos8.3 3.刻镜像工具:rufus 启动盘制作 我这里选择的是rufus,没有用UltraISO,因为制作的镜像经常 ...

  2. openbox每日开机自动切换网络壁纸

    目的 利用bing的每日一图, 每天切换壁纸 开干 联网后下载图片 利用networkmanage启动后执行脚本 netafter.sh 文件地址: /etc/NetworkManager/dispa ...

  3. 「CF1101F」Trucks and Cities

    题意描述 有 \(N\) 座城市,第 \(i\) 座坐标为 \(a_i\) ,有 \(M\) 辆卡车,第 \(i\) 辆卡车要从城市 \(s_i\) 前往城市 \(e_i\) ,每单位长度耗油量为 \ ...

  4. Golang sync.pool源码解析

    Golang sync.pool源码解析 - sync.pool - 是什么 - 怎么用 - demo - 真实世界的使用 - 源码解读-数据结构 - 源码解读-读写流程 - 写流程 - 读流程 - ...

  5. Mac常用系统配置

    一.系统类 1.隐藏文件夹 打开控制台输入:chflags hidden [拖入需要隐藏的文件夹] 2.特定软件触控栏一直显示F1-F12 选择左上角苹果->系统设置->键盘-> 3 ...

  6. 百万架构师第四十一课:RabbitMq:可靠性投递和实践经验|JavaGuide

    来源:https://javaguide.net RabbitMQ 2-可靠性投递与生产实践 可靠性投递 ​ 首先需要明确,效率与可靠性是无法兼得的,如果要保证每一个环节都成功,势必会对消息的收发效率 ...

  7. mybatis - [09] 动态SQL

    题记部分 一.if & test 如果id,name,age不为空,则按照指定的值进行查询.如果这三者都是空(null和空字符串),则该sql执行结果为全表查询的结果集. <select ...

  8. 使用PySide6/PyQt6实现Python跨平台GUI框架的开发

    在前面的<Python开发>中主要介绍了FastAPI的后端Python开发,以及基于WxPython的跨平台GUI的开发过程,由于PySide6/PyQt6 在GUI的用途上也有很大的优 ...

  9. C++调用动态链接库DLL的隐式链接和显式链接基本方法小结

    C++程序在运行时调用动态链接库,实现逻辑扩展,有两种基本链接方式:隐式链接和显式链接.下面就设立最基本情形实现上述链接. 创建DLL动态链接库 编辑头文件 mydll_3.h: #pragma on ...

  10. 万字解析Golang的map实现原理

    0.引言 相信大家对Map这个数据结构都不陌生,像C++的map.Java的HashMap.各个语言的底层实现各有不同,在本篇博客中,我将分享个人对Go的map实现的理解,以及深入源码进行分析,相信耐 ...