java——文件的上传、下载、删除操作DEMO

记录一下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;
    }
}

image

posted @ 2021-04-13 10:10  super_龙  阅读(321)  评论(0编辑  收藏  举报