hutool实现文件上传与下载/pdf预览

本文介绍了如何在SpringMVC项目中利用Hutool库进行文件上传,通过查询数据库路径下载资源,并实现PDF文件的预览,展示了依赖管理和文件操作的实践应用。
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.16</version>
        </dependency>

文件上传需要创建一个表

@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("文件下载失败");
        }
    }


    //实现pdf预览
    @GetMapping("/getPdfView")
    public void pdf(HttpServletRequest request, HttpServletResponse response) {
        try {
            File file = new File("C:\\hzx\\uploadPath\\2023\\10\\12\\打车去高铁站发票_20231012112938A001.pdf");
            FileInputStream fileInputStream = new FileInputStream(file);
            response.setHeader("Content-Type", "application/pdf");
            OutputStream outputStream = response.getOutputStream();
            IOUtils.write(IOUtils.toByteArray(fileInputStream), outputStream);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

### Hutool 库中的文件上传下载方法 #### 文件上传示例 Hutool 提供了便捷的方法来处理文件上传。通过 `ExcelUtil` 和其他工具类可以轻松读取并解析上传的文件。 ```java import cn.hutool.poi.excel.ExcelUtil; import javax.servlet.http.HttpServletRequest; public class FileUploadExample { public void handleFileUpload(HttpServletRequest request) { try (InputStream inputStream = request.getInputStream()) { // 创建 ExcelReader 对象用于读取 Excel 文件 ExcelReader reader = ExcelUtil.getReader(inputStream); // 读取所有数据到列表中 List<List<Object>> data = reader.read(); // 处理数据... } catch (IOException e) { throw new RuntimeException(e); } } } ``` 此代码片段展示了如何利用 Hutool 的 `ExcelUtil` 类从 HTTP 请求流中获取输入流,并将其转换成可操作的数据结构以便进一步处理[^2]。 #### 文件下载示例 对于文件下载功能,可以通过设置响应头以及将字节流传送给客户端实现。下面是一个简单的例子: ```java import cn.hutool.core.io.FileUtil; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class FileDownloadExample { private static final String FILE_PATH = "D:\\Biancheng\\IdeaProject\\Spring-Vue-practice\\file"; public void downloadFile(HttpServletResponse response, String fileName) throws IOException { // 获取要下载文件对象 File file = FileUtil.file(FILE_PATH, fileName); if (!file.exists() || !file.isFile()) { throw new FileNotFoundException("The requested file does not exist."); } // 设置响应头部信息 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, StandardCharsets.UTF_8)); // 将文件写入输出流发送给浏览器端 ServletOutputStream outputStream = response.getOutputStream(); FileUtil.writeBytes(FileUtil.readBytes(file), outputStream); outputStream.flush(); outputStream.close(); } } ``` 这段代码说明了怎样使用 Hutool 中的 `FileUtil` 工具类配合标准 Java IO 流完成文件向用户的传输过程[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值