post.js 2.06 KB
const fs = require('fs');
const path = require('path');
const axios = require('axios');
const FormData = require('form-data');

const distFile = './fw-cms.tar.gz';

/**
 * 上传apk文件
 * @param {string} path apk文件信息
 */
async function uploadFile() {
  if (!fs.existsSync(distFile)) {
    console.error(' 🚨 文件不存在,请检查是否打包成功');
    return;
  }
  const formData = new FormData();
  formData.append('file', fs.createReadStream(distFile));
  const config = {
    method: 'post',
    url: 'https://upload.feewee.cn/upload',
    headers: {
      ...formData.getHeaders(),
    },
    onUploadProgress: (progressEvent) => {
      const { loaded, total } = progressEvent;
      console.info(`上传进度: ${Math.round((loaded / total) * 100)}%`);
    },
    maxContentLength: Infinity,
    maxBodyLength: Infinity,
    data: formData,
    timeout: 600000,
  };
  try {
    const response = await axios.request(config);
    const res = response.data;
    if (res.success) {
      return res.data;
    } else {
      throw Error('文件上传失败');
    }
  } catch (error) {
    console.error(error);
    let code, errorMsg;
    if (error.response) {
      code = (error.response.data && error.response.data.code) || error.response.status;
      errorMsg = (error.response.data && error.response.data.message) || error.response.statusText;
    } else {
      code = error.code || -1;
      errorMsg = error.message || 'UNKNOWN ERROR';
    }
    console.error(code, errorMsg);
  }
  return '';
}

async function run() {
  const fid = await uploadFile();
  if (!fid) {
    console.info('文件上传失败');
    return;
  }
  // 写入文件fid到文件
  if (fs.existsSync('./build.txt')) {
    if (fs.statSync('./build.txt').isFile()) {
      fs.unlinkSync('./build.txt'); //删除文件
    }
  }
  fs.writeFileSync(path.join(__dirname, 'build.txt'), `https://gate.feewee.cn/file/show?fid=${fid}`);

  // 写入文件fid到文件
  if (fs.existsSync(distFile)) {
    if (fs.statSync(distFile).isFile()) {
      fs.unlinkSync(distFile); //删除文件
    }
  }
}

run();