GithubHelp home page GithubHelp logo

cdnDomain自定义 about build-cdn-from-cdnjs HOT 2 OPEN

Color-l avatar Color-l commented on June 28, 2024
cdnDomain自定义

from build-cdn-from-cdnjs.

Comments (2)

lei-mu avatar lei-mu commented on June 28, 2024

同步文件 fileSynchronization 方法,改成自己的上传方法。如果前端直传,就看看oss 的示例。如果后端上传,需要后端提供接口

from build-cdn-from-cdnjs.

lei-mu avatar lei-mu commented on June 28, 2024

这是一个qiniu + egg.js 后端例子

// app/service/topics.js
const Service = require('egg').Service;
var qiniu = require('qiniu');
const qiNiuConfig = require('../../config/qiniu');

const cdnJsBase = `https://cdnjs.cloudflare.com/ajax/libs`;
// https://developer.qiniu.com/kodo/1289/nodejs#5
class ObjectStorageService extends Service {
  constructor(ctx) {
    super(ctx);
    // this.root = 'https://cnodejs.org/api/v1';
  }

  async create(params) {
    var config = new qiniu.conf.Config();
    // 空间对应的机房
    config.zone = qiniu.zone.Zone_z0;
    var accessKey = qiNiuConfig.client.accessKeyId;
    var secretKey = qiNiuConfig.client.accessKeySecret;
    var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);

    const options = {
      scope: qiNiuConfig.client.bucket,
      expires: 7200
    };
    const putPolicy = new qiniu.rs.PutPolicy(options);
    const uploadToken = putPolicy.uploadToken(mac);
    // https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.47/vue.cjs.min.js

    const formUploader = new qiniu.form_up.FormUploader(config);
    var putExtra = new qiniu.form_up.PutExtra();
    var result = await this.ctx.curl(`${cdnJsBase}/${params.name}/${params.version}/${params.key}`, {
      timeout: [ 30000, 30000 ]
    }); // 可读的流
    this.checkCdnjsFileSuccess(result);
    const bufferString = result.data.toString();
    const key = `ajax/libs/${params.name}/${params.version}/${params.key}`;
    const putFile = () => new Promise((resolve, reject) => {
      formUploader.put(uploadToken, key, bufferString, putExtra, function(respErr,
        respBody, respInfo) {
        if (respErr) {
          reject(respErr);
        }
        resolve(respInfo);
      });
    });
    const uploadFileRes = await putFile();
    if (uploadFileRes.statusCode !== 200) {
      this.ctx.throw(500, uploadFileRes?.data?.error || 'remote response error', {
        statusCode: uploadFileRes.statusCode,
        data: uploadFileRes.data
      });
    }
    return uploadFileRes.data;
  }

  // 封装统一的调用检查函数,可以在查询、创建和更新等 Service 中复用
  checkSuccess(result) {
    if (result.status !== 200) {
      const errorMsg =
        result.data && result.data.error_msg
          ? result.data.error_msg
          : 'unknown error';
      this.ctx.throw(result.status, errorMsg);
    }
    if (!result.data.success) {
      // 远程调用返回格式错误
      this.ctx.throw(500, 'remote response error', { data: result.data });
    }
  }

  checkCdnjsFileSuccess(result) {
    if (result.status !== 200) {
      const errorMsg =
        result.data && result.data.error_msg
          ? result.data.error_msg
          : 'unknown error';
      this.ctx.throw(result.status, errorMsg);
    }
  }
}

module.exports = ObjectStorageService;

from build-cdn-from-cdnjs.

Related Issues (1)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.