Skip to content
On this page

ALIYUN v1.4.10+

这里是直传阿里云OSS的方法介绍,分为 uploadAliyunOSS 异步上传方式和 uploadAliyunOSSSync 同步上传方式。两个方法都需要获取后端或者前端返回的阿里OSS的 STS临时授权凭证信息使用STS临时访问凭证访问OSS

uploadAliyunOSS

直传阿里OSS,这是一个异步接口。

请求参数

参数名类型必填说明
filePathString要上传文件资源的路径
uploadDirString文件上传至OSS的存储目录
maxSizeNumber限制上传文件的大小,单位为MB,默认值为 5
timeoutNumber限制参数的生效时间,单位小时,默认值为 1
uploadImageUrlString上传的阿里云OSS地址,示例:https://demo-static.oss-cn-hangzhou.aliyuncs.com
formDataObjectHTTP 请求中其他额外的 form data
getOSSBySTS() => Promise<GetOSSBySTSSuccessCallback> GetOSSBySTSSuccessCallback获取OSS临时授权访问凭证信息,使用STS临时访问凭证访问OSS
getPolicyBase64string获取签名的base64字符串,见下方说明
getSignature(policyBase64: string, accessKeySecret: string) => Promise<string>获取OSS签名,参考JavaScript客户端签名直传服务端签名后直传

返回值

参数名类型说明
codenumber状态码,0为成功、1为失败
msgstring状态描述
dataobject | undefined返回内容,见下方说明

Data 说明

filePathuploadDiruploadImageUrl 字段校验失败时为 undefined;图片上传失败时结果为 uni.uploadFile的失败结果,图片上传成功时返回内容见上传成功的Data 结构说明

上传成功的Data 结构说明

参数名类型说明
uploadTaskUniApp.UploadTask上传任务实例,见uploadTask对象的方法列表
urlstring上传成功后阿里云OSS的完整地址
pathstring上传成功后文件存储的路径,即去除阿里云OSS域名后的地址,示例:/static/uploads/2023-05-25/1685006606290_241520.png

uploadAliyunOSSSync

直传阿里OSS,这是一个同步接口。

请求参数

uploadAlioss 请求参数

返回值

uploadAlioss 返回值

示例

提示

示例代码中演示了同步接口的调用,异步接口的调用请看下面的注释代码,演示数据仅供参考,非真实数据

ts
import { type GetOSSBySTSSuccessCallback, Http } from "lwu-request";
// 初始化请求库
const http = new Http({
  baseUrl: {
    pro: "",
    dev: "",
  },
});

// 获取policyBase64字符串
const getPolicyBase64 = () => {
  let date = new Date();
  // 设置过期时间
  date.setHours(date.getHours() + 1);
  let srcT = date.toISOString();
  const policyText = {
    expiration: srcT,
    conditions: [
      // 限制上传文件大小
      ["content-length-range", 0, 15 * 1024 * 1024],
    ],
  };

  return Buffer.from(JSON.stringify(policyText)).toString("base64");
};

// 获取签名
const getSignature = (
  policyBase64: string,
  accessKeySecret: string,
): Promise<string> => {
  return new Promise(async (resolve, reject) => {
    resolve(
      await uni.$api.apply.getSignature({
        policyBase64: policyBase64,
        accessKeySecret: accessKeySecret,
      }),
    );
  });
};

// 获取oss临时授权凭证信息
const getOSSBySTSInfo = (): Promise<GetOSSBySTSSuccessCallback> => {
  return new Promise(async (resolve, reject) => {
    const result: GetOSSBySTSSuccessCallback = await uni.$api.apply
      .getOSSBySTS();
    if (result.code !== 1) {
      uni.$tools.modal({
        title: "提示",
        content: "获取上传配置信息失败,请稍后再试",
        showCancel: false,
        confirmText: "确定",
      });
      return;
    }

    resolve(result.data as GetOSSBySTSSuccessCallback);
  });
};

uni.chooseImage({
  count: 9,
  sizeType: ["compressed"],
  success: async (res: UniApp.ChooseImageSuccessCallbackResult) => {
    // 同步接口调用示例
    const { code, data } = await http.uploadAliossSync({
      filePath: res.tempFilePaths[0].url || "",
      uploadDir: `static/uploads/apply/20230525/112`,
      uploadImageUrl: "https://demo-static.oss-cn-hangzhou.aliyuncs.com",
      getOSSBySTS: getOSSBySTSInfo,
      getPolicyBase64: getPolicyBase64,
      getSignature: getSignature,
    }) as {
      code: number;
      data: {
        uploadTask: UniApp.UploadTask;
        url: string;
        path: string;
      };
    };

    if (code !== 0) {
      console.log("图片上传失败");
      return;
    }

    // 上传进度监听
    data.uploadTask.onProgressUpdate((res: UniApp.OnProgressUpdateResult) => {
      console.log(res);
    });

    // 异步接口调用示例
    // http.uploadAlioss({
    //   filePath: res.tempFilePaths[0].url || "",
    //   uploadDir: `static/uploads/apply/20230525/112`,
    //   uploadImageUrl: "https://demo-static.oss-cn-hangzhou.aliyuncs.com",
    //   getOSSBySTS: getOSSBySTSInfo,
    //   getPolicyBase64: getPolicyBase64,
    //   getSignature: getSignature,
    // }).then((uploadRes: {
    //   code: number;
    //   data: {
    //     uploadTask: UniApp.UploadTask;
    //     url: string;
    //     path: string;
    //   };
    // }) => {
    //   if (code !== 0) {
    //     console.log("图片上传失败");
    //     return;
    //   }

    //   // 上传进度监听
    //   data.uploadTask.onProgressUpdate((res: UniApp.OnProgressUpdateResult) => {
    //     console.log(res);
    //   });
    // });
  },
});

本文档内容版权为 Lwu-Request 官方团队所有,保留所有权利。