SpringBoot实现Txt文件预览或下载

我们在做项目时经常会碰到需要实现文件的预览或下载,下面用SpringBoot简单实现一下。

1、预览文件

package com.example.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;

/**
 * @Description: txt文件预览
 * @author: caihai
 * @date: 2023年02月08日 9:45
 */
@RestController
@RequestMapping("/preview")
public class TxtFilePreview {

    @Resource
    HttpServletResponse response;

    @Resource
    HttpServletRequest request;

    @GetMapping(value = "/file")
    public void previewFile() throws Exception {

        String path = "C:\\Users\\HP\\Desktop\\dict_test.txt";

        File file = new File(path);

        String fileName = file.getName();

        response.setCharacterEncoding("UTF-8");

        BufferedInputStream br = null;
        OutputStream out = null;
        if (file.exists()) {
            try {
                br = new BufferedInputStream(new FileInputStream(file));
                byte[] buf = new byte[1024];
                int len = 0;

                response.reset();

                String agent = request.getHeader("user-agent");
                if (agent.contains("FireFox")) {
                    fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
                } else {
                    fileName = URLEncoder.encode(fileName, "UTF-8");
                }

                String mineType = request.getServletContext().getMimeType(fileName);
                response.setContentType(mineType);
                response.setHeader("Content-Disposition", "inline; filename=" + fileName);      // 在线预览
//                response.setHeader("Content-Disposition", "attachment; filename=" + fileName);  // 下载

                out = response.getOutputStream();
                while ((len = br.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                out.flush();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (out != null) {
                    out.close();
                }
                if (br != null) {
                    br.close();
                }
            }
        } else {
            throw new Exception("文件不存在");
        }
    }
}

2、下载文件

下载文件跟预览文件时间上是一样的,仅仅是打开方式不太一样。

/**
* 文件下载
*
* @param request  request
* @param response response
* @param fileName 文件名
* @param path     文件路径
*/
public static void downLoadFile(HttpServletRequest request, HttpServletResponse response, String fileName, String path) {
      FileInputStream inputStream = null;
      BufferedInputStream bufferedInputStream = null;
      OutputStream outputStream = null;
      try {
          File file = new File(FilenameUtils.normalize(path));
          if (file.exists()) {
              String agent = request.getHeader("user-agent");
              if (agent.contains("FireFox")) {
                  fileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
              } else {
                  fileName = URLEncoder.encode(fileName, "UTF-8");
              }
              String mineType = request.getServletContext().getMimeType(fileName);
              response.setContentType(mineType);
              response.setHeader("content-type", "application/form-data");
              response.setHeader("Content-disposition", "attachment; fileName=" + fileName);

              inputStream = new FileInputStream(file);
              bufferedInputStream = new BufferedInputStream(inputStream);
              outputStream = response.getOutputStream();
              int len = 0;
              byte[] buff = new byte[1024];
              while ((len = bufferedInputStream.read(buff)) != -1) {
                  outputStream.write(buff, 0, len);
              }
          } else {
              throw new ValidateException("下载的文件资源不存在");
          }
      } catch (Exception e) {
          e.printStackTrace();
      } finally {
          try {
              if (inputStream != null) {
                  inputStream.close();
              }
              if (bufferedInputStream != null) {
                  bufferedInputStream.close();
              }
              if (outputStream != null) {
                  outputStream.flush();
                  outputStream.close();
              }
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
}

3、设置头信息使浏览器预览或下载文件

强制浏览器下载

response.setHeader("Content-Disposition", "attachment; filename=" + fileName)

浏览器在线打开

response.setHeader("Content-Disposition", "inline; filename=" + fileName)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Boot与Minio结合可以实现文件预览功能。Minio是一个开源的对象存储服务器,可以很方便地进行文件上传和下载。在Spring Boot项目中集成Minio,可以使用Minio提供的API进行文件操作,如上传、下载、删除等。 为了实现文件预览功能,首先需要在Spring Boot项目中引入Minio的依赖,并配置Minio相关的参数,包括连接地址、用户名和密码等。可以使用Minio客户端库或者直接调用Minio的RESTful API进行文件的操作。 在文件上传时,可以将文件保存到Minio服务器中,并将返回的文件访问路径保存到数据库或者其他地方。在文件预览时,可以根据文件的访问路径将文件内容展示在前端页面上,或者通过Minio提供的预览功能进行文件预览。 需要注意的是,在部署Minio服务器时,需要有两台Linux服务器,每台服务器挂载两块硬盘作为Minio节点。具体的部署过程包括分区、格式化、挂载到指定文件夹。有关具体的部署步骤和命令,可以参考相关的文档或者教程。 综上所述,通过在Spring Boot项目中集成Minio,并配置相关参数,可以实现文件预览功能。文件上传时保存文件到Minio服务器,文件预览时通过文件的访问路径展示文件内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [文件服务器mino实现文件存储和文件预览接口](https://download.csdn.net/download/song12345xiao/86261449)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [springboot整合minio实现文件上传下载](https://blog.csdn.net/weixin_41964243/article/details/127832843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值