下载接口同时返回文件和数据

该文章描述了一个后端接口用于文件下载的实现,使用了FileService和SFTPUtil处理文件,返回HTTP响应包含文件内容和header信息。前端通过axios进行GET请求,设置responseType为blob来接收二进制数据,并利用Blob对象和a标签实现非IE浏览器的文件保存。
摘要由CSDN通过智能技术生成

后端接口

import com.example.wxservice.dto.FileDto;
import com.example.wxservice.service.FileService;
import com.example.wxservice.test.ftpfileload.SFTPUtil;
import com.example.wxservice.util.R;
import com.jcraft.jsch.SftpException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

@GetMapping("/download")
    public ResponseEntity<byte[]> downloadFile(String id) throws IOException {
        FileDto fileDto = fileService.getById(id);
        File file = new File(fileDto.getFilePath());
        byte[] data = Files.readAllBytes(file.toPath());
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", file.getName());
        headers.setContentLength(data.length);
        headers.setAccessControlExposeHeaders(Arrays.asList("result"));
        headers.set("result", "222");
        return new ResponseEntity<>(data, headers, HttpStatus.OK);
    }

前端

download(file) {
  axios({
    url: base.fileDownload + '?id=' + file.id,
    method: 'GET',
    responseType: 'blob' // 表示接收二进制数据
  })
    .then(response => {
      console.log(JSON.stringify(response.headers.get("result")))
      let blob = new Blob([response.data]);
      let fileName = file.fileName;
      if (window.navigator.msSaveOrOpenBlob) {
        navigator.msSaveBlob(blob, fileName);
      } else {
        var link = document.createElement("a");
        link.href = window.URL.createObjectURL(blob);
        link.download = fileName;
        link.click();
        //释放内存
        window.URL.revokeObjectURL(link.href);
      }
    })
    .catch(error => {
      console.error(error)
    })
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据引用中的描述,可以通过React获取Java后台文件下载Excel文件。具体的数据接收方式可以参考以下步骤: 1. 首先,你需要在前端React的代码中,通过发送HTTP请求调用Java后台的下载文件接口。可以使用Axios或Fetch等库来发送请求。在请求中,你可以指定文件的URL或其他必要的参数。 2. 在Java后台,你需要编写一个接口来接收前端发送的请求。这个接口应该接收请求中的参数并处理相应的逻辑。 3. 一般情况下,文件下载接口可以使用GET请求。你可以通过在Java后台的接口中使用@GetMapping注解来指定接口使用GET请求。 4. 在Java后台的接口中,你可以使用@RequestParam注解来接收前端传递的参数。具体的参数名和类型应该与前端发送请求时的参数名和类型保持一致。 5. 接收到请求后,你可以根据参数的值进行相应的处理。例如,可以根据参数来确定需要下载文件的路径或其他相关信息。 6. 最后,根据确定的文件路径或其他信息,你可以使用Java文件流操作,将文件以流的形式返回前端。可以使用HttpServletResponse对象的OutputStream将文件数据写入响应中,使得前端可以接收到文件并进行下载。 综上所述,下载文件接口数据接收过程包括前端发送请求、Java后台接口接收请求并处理参数、根据参数确定文件路径或其他信息、使用文件流操作将文件以流的形式返回前端
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不积跬步无以至千里-陕西西安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值