hutool实现文件上传与下载

XML 复制代码
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.16</version>
        </dependency>

文件上传需要创建一个表

java 复制代码
@Autowired
    private SysFileInfoMapper sysFileInfoMapper;

    @Value("${ty.profile}")
    private String profile;

    @PostMapping("/add")
    public AjaxResult addSave( MultipartFile file, SysFileInfo fileInfo) throws IOException
    {
        //获取文件名2.txt
        String originalFilename = file.getOriginalFilename();
        //给文件名添加前缀年月日时分秒毫秒,防止文件名称重复给顶掉
        String fileName = DateUtils.parseDateToStr("yyyyMMddHHmmssSSS", DateUtils.getNowDate()) +"_"+ originalFilename;
        //获取文件路径,主路径+文件名
        String path = profile+"/"+fileName;
        //使用huTool工具类实现文件上传
        FileUtil.writeBytes(file.getBytes(),path);
        //将文件名和文件路径存入表中
        fileInfo.setFileName(fileName);
        fileInfo.setFilePath(path);
        sysFileInfoMapper.insert(fileInfo);
        return AjaxResult.success("成功");
    }


    /**
     * 本地资源通用下载
     */
    @GetMapping("/common/download/resources")
    public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
            throws Exception
    {
        try {
            ServletOutputStream outputStream = response.getOutputStream();
            //根据文件名称查询文件路径
            LambdaQueryWrapper<SysFileInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
            lambdaQueryWrapper.eq(SysFileInfo::getFileName,resource);
            SysFileInfo sysFileInfo = sysFileInfoMapper.selectOne(lambdaQueryWrapper);
            if (ObjectUtil.isNotNull(sysFileInfo)){
                String filePath = sysFileInfo.getFilePath();
                response.setCharacterEncoding("utf-8");
                response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(sysFileInfo.getFileName(), "UTF-8"));
                response.setContentType("application/octet-stream");
                //通过文件的路径读取文件字节流,通过response的输出流返回文件
                outputStream.write(FileUtil.readBytes(filePath));
                outputStream.flush();
                outputStream.close();
            }
        }catch (Exception e){
            throw new SecurityException("文件下载失败");
        }
    }
复制代码
相关推荐
59803541516 分钟前
【java工具类】小数、整数转中文大写
android·java·开发语言
JIngJaneIL24 分钟前
基于java + vue个人博客系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
吃喝不愁霸王餐APP开发者34 分钟前
Java后端服务在对接全国性霸王餐API时的多数据中心部署与就近调用策略
java·开发语言
从心归零42 分钟前
springboot-jpa的批量更新方法
java·spring boot·spring
这周也會开心1 小时前
128陷阱,==与equals区别
java·开发语言
TAEHENGV2 小时前
回收站模块 Cordova 与 OpenHarmony 混合开发实战
android·java·harmonyos
a努力。2 小时前
宇树Java面试被问:方法区、元空间的区别和演进
java·后端·面试·宇树科技
2501_916766542 小时前
【面试题1】128陷阱、==和equals的区别
java·开发语言
a程序小傲3 小时前
蚂蚁Java面试被问:注解的工作原理及如何自定义注解
java·开发语言·python·面试
幽络源小助理3 小时前
SpringBoot+Vue摄影师分享社区源码 – Java项目免费下载 | 幽络源
java·vue.js·spring boot