下载服务器的SDK压缩包资源

该文章描述了一个下载控制器DownloadController,用于处理从服务器下载SDK压缩包的请求。在后端,使用SpringBoot框架,当用户验证通过后,提供文件下载。前端部分展示了一个React组件,其中包含一个按钮,用户点击后通过AntDesign的Button组件发起下载请求。
摘要由CSDN通过智能技术生成

下载服务器的SDK压缩包资源

DownloadController层

package com.xc.project.controller;

import com.xc.project.common.ErrorCode;
import com.xc.project.exception.BusinessException;
import com.xc.project.service.UserService;
import com.xc.xcapicommon.model.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.nio.file.Files;

/**
 * @author xc
 * @date 2023/4/19 15:35
 */
@RestController
@Slf4j
@RequestMapping("download")
public class DownloadController {

    @Autowired
    private UserService userService;
	// 文件下载在服务器路径,因为我这只有一个文件,所以这么写,实际可以根据访问路径来匹配资源
    private static final String SDK_HELP_ADDRESS = "/home/XC/download/xcapi-client-sdk.zip";

    @GetMapping("sdkHelp")
    public ResponseEntity<Resource> downloadSdkHelp(HttpServletRequest request) throws IOException {
        // 请求不能为null
        if (request == null) {
            throw new BusinessException(ErrorCode.FORBIDDEN_ERROR);
        }
        // 当前登录用户要存在
        User loginUser = userService.getLoginUser(request);
        if (loginUser == null || loginUser.getId() == null) {
            throw new BusinessException(ErrorCode.NOT_LOGIN_ERROR);
        }

        //获取要下载的文件
        File file = new File(SDK_HELP_ADDRESS);
        InputStream is = Files.newInputStream(file.toPath());
        //获取文件输入流
        //创建资源对象,将输入流加载其中
        InputStreamResource resource = new InputStreamResource(is);

        //设置响应头,指定文件名称
        HttpHeaders headers = new HttpHeaders();
        // 只有设置正确的响应头,客户端才知道此时是文件下载
        headers.add("Content-Disposition", String.format("attachment; filename=%s", file.getName()));

        //返回文件下载响应
        return ResponseEntity.ok().headers(headers).contentLength(file.length()).body(resource);
    }
}

前端react页面

import {PageContainer,} from '@ant-design/pro-components';
import {
  Button,
  Descriptions, Form,
} from 'antd';
import {
  getEncryptUsingGET,
} from "@/services/xcapi-backend/userController";
import {useState} from "react";
import {decrypt} from "@/utils/ComplexEncryption";

/**
 * SDK调用帮助页面
 * @constructor
 */
const Index: React.FC = () => {
  const loadData = async () => {
    const {data} = await getEncryptUsingGET();
    return data;
  }
  let [encryptAk, setEncryptAk] = useState('');
  let [encryptSk, setEncryptSk] = useState('');
  loadData().then(data => {
    console.log(data?.encryptAk)
    setEncryptAk(decrypt(data?.encryptAk));
    setEncryptSk(decrypt(data?.encryptSk));
  })

  return (
    <PageContainer title="本地调用帮助文档">
      <>
        {}
        <Descriptions title={"不可透露"}>
          <Descriptions.Item label="AccessKey">{encryptAk}</Descriptions.Item>
          <Descriptions.Item label="secretKey">{encryptSk}</Descriptions.Item>
        </Descriptions>
        <Form name='findHelp' layout='vertical' >
          // 通过button的href来下载服务器的压缩包
          <Button href={"http://xcapi-backend.wangcheng.love/api/download/sdkHelp"} type='primary' htmlType='submit'>
            下载SDK
          </Button>
        </Form>
      </>
    </PageContainer>
  );
};
export default Index;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值