javascript上传文件到微软azure存储

367 阅读1分钟

通过后端接口拿到domain、bucket、token、key,拼接domain、bucket、key后获得文件url

import { BlobServiceClient } from '@azure/storage-blob';
import { TransferProgressEvent } from '@azure/core-http';
import { AbortController } from '@azure/abort-controller';

interface Options {
    onProgress: (percent: number, controll: any) => void;
    onSuccess: (response: any) => void;
    onError: (err: any) => void;
    /** 微软文件存储域名 */
    domain: string;
    /** 容器名 */
    bucket: string;
    /** 跟域名拼接获取sasurl */
    token: string;
    /** 文件路径+文件名 */
    key: string;
}



export const uploadFile = async <T extends File>(file: T, options: Options) => {
    const { domain, token, bucket, key } = options;
    const { size } = file;
    const blobServiceClient = new BlobServiceClient(token);
    const containerClient = blobServiceClient.getContainerClient(bucket);
    const blockBlobClient = containerClient.getBlockBlobClient(key);

    // 创建一个请求中断控制实例
    const controll = new AbortController();

    try {
        const res = await blockBlobClient.upload(file, size, {
        onProgress: (progress: TransferProgressEvent) => {
        options.onProgress(
        parseInt((Math.round((progress.loadedBytes / size) * 10000) / 100.0).toFixed(), 0),controll);},abortSignal: controll.signal,});
        options.onSuccess({ ...res, data: { domain, key: `${bucket}/${key}` } });
    } catch (err) {
        options.onError(err);
    }
};