3.0.1 • Published 2 years ago

@openfuse/ufs-js-client v3.0.1

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

UFS JS SDK

安装

npm install @openfuse/ufs-js-client

使用

使用帮助见:https://docs.bingosoft.net/fuse/ufs-sdk/docs/intro/fast-started.html

1、初始化UFS Client

UfsClient是UFS的客户端,用于管理存储预览文件等操作。在进行所有UFS服务操作前,您都需先初始化一个UfsClient实例,以下代码用于创建UfsClient,一个工程中可以有一个或多个UfsClient,UfsClient支持并发使用

let client = new UfsClient({
    basePath: endpoint,  //如:'http://10.200.21.47:31365/ufsapi',
    accessToken: async () => {
        return getTokenFromSession();
    }
});

/**
 * 一般从前端的会话中获取token
 */
function getTokenFromSession(){
    // 如果使用fly-vue框架,可使用以下代码
    // import { Session } from '@fly-vue/core';
    // return Session.getToken();
    return "token_in_session";
}

新建UfsClient时, 需要指定Endpoint和AccessToken

  • Endpoint: Endpoint的信息需要从UFS负责人处获取
  • AccessToken: UFS接口调用凭据,一般有两种获取方式:
    • 方式一:从当前会话中获取,应用接入SSO后,用户从SSO登录成功后,会得到一个访问令牌,应用可以使用该令牌进行UFS相关操作
    • 方式二:使用应用的clientId和clientSecret生成应用的访问令牌,获取方式详见SSO获取AccessToken接口,(注:使用该类型的Token进行的操作,不包含操作人信息)
    • Token使用一段时间会自动过期,Token刷新方案详见SSO刷新token接口

2、文件上传

// 待上传的文件,一般为通过<input type="file">选择的文件,
const textFile = document.getElementById("fileInput").files[0];
const formData = new FormData();
formData.append('file', textFile);
    
const contentLengthPromise = new Promise<number>((resolve, reject) => {
    formData.getLength(async (_err, contentLength) => {
        if (_err) {
            reject(_err)
        } else {
            resolve(contentLength)
        }
    })
});
//这里注意:必须附加Content-Length头,否则会报错
const contentLength = await contentLengthPromise;

const fileAttrs = {
    filename: 'text.txt'
};
const signRequest: UploadSignRequest = { ...fileAttrs };
const commitRequest = { ...fileAttrs };
const res = await client.file()
    .upload(formData, signRequest, commitRequest, {
        headers: { 'Content-Length': contentLength }
    })
    .catch((err) => {
        console.log(err.response)
    });

// 处理文件上传结果
if (res) {
    let fileStatus: FileStatus = res.data
    return fileStatus;
}

3、文件下载

const fileId="xxxx";
const signedRes = await client.file()
    .downloadSign(fileId, {});
if(signedRes){
    // 获取文件下载地址,并下载文件
    const url=signedRes.data.url;
    window.open(url);
}

4、获取文件信息

const fileId="xxxx";
const res = await client.file().status(fileId);
if(res){
    console.log(res.data);
}