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("文件下载失败");
        }
    }
复制代码
相关推荐
珹洺8 分钟前
C++算法竞赛篇:DevC++ 如何进行debug调试
java·c++·算法
SHUIPING_YANG15 分钟前
根据用户id自动切换表查询
java·服务器·数据库
爱吃烤鸡翅的酸菜鱼28 分钟前
IDEA高效开发:Database Navigator插件安装与核心使用指南
java·开发语言·数据库·编辑器·intellij-idea·database
惊涛骇浪、34 分钟前
SpringMVC + Tomcat10
java·tomcat·springmvc
墨染点香1 小时前
LeetCode Hot100【6. Z 字形变换】
java·算法·leetcode
ldj20201 小时前
SpringBoot为什么使用new RuntimeException() 来获取调用栈?
java·spring boot·后端
超龄超能程序猿1 小时前
Spring 应用中 Swagger 2.0 迁移 OpenAPI 3.0 详解:配置、注解与实践
java·spring boot·后端·spring·spring cloud
风象南1 小时前
SpringBoot配置属性热更新的轻量级实现
java·spring boot·后端
洛阳泰山1 小时前
Spring Boot 整合 Nacos 实战教程:服务注册发现与配置中心详解
java·spring boot·后端·nacos
Y4090011 小时前
C语言转Java语言,相同与相异之处
java·c语言·开发语言·笔记