uni-app 华为OBS文件上传

发布于 1周前 作者 caililin 来自 Uni-App
2 回复

可以做,这边做过华为支付,授权登录sdk uniapp原生插件,联系qq:16792999


在使用uni-app进行华为OBS(Object Storage Service)文件上传时,你需要先确保已经获取了华为云的访问密钥(Access Key ID和Secret Access Key),并配置好了OBS的Bucket信息。以下是一个简单的代码示例,展示如何通过uni-app将文件上传到华为OBS。

首先,你需要在uni-app项目中安装axios用于HTTP请求,以及crypto-js用于签名计算(如果需要)。

npm install axios crypto-js

接下来是主要的代码实现:

// 引入axios
import axios from 'axios';

// 华为OBS配置
const obsConfig = {
  endpoint: 'your-obs-endpoint', // 例如:https://your-bucket-name.obs.cn-north-1.myhuaweicloud.com
  ak: 'your-access-key-id',
  sk: 'your-secret-access-key',
  bucket: 'your-bucket-name',
};

// 获取临时授权信息(如果需要预先获取签名等)
// 此处为简化示例,假设直接使用AK/SK进行签名,实际生产环境中应考虑安全性
async function getAuth() {
  // 这里的签名过程依赖于具体API的要求,可能需要使用crypto-js等库
  // 以下仅为示例,实际签名过程需参考华为OBS SDK或API文档
  const date = new Date().toISOString().replace(/[:-.]/g, '').slice(0, 14);
  const stringToSign = `PUT\n\napplication/octet-stream\n${date}\n/${obsConfig.bucket}/${encodeURIComponent('your-object-key')}`;
  const hmac = CryptoJS.HmacSHA256(stringToSign, obsConfig.sk);
  const signature = CryptoJS.enc.Base64.stringify(hmac);

  return {
    date,
    signature,
  };
}

// 上传文件函数
async function uploadFileToOBS(filePath) {
  const auth = await getAuth();
  const url = `${obsConfig.endpoint}/${encodeURIComponent('your-object-key')}`;
  const formData = new FormData();
  formData.append('file', await uni.getFileSystemManager().readFile({
    filePath,
    encoding: 'binary',
    success: res => formData.append('file', res.data),
    fail: err => console.error(err)
  }));

  const headers = {
    'Authorization': `OBS ${obsConfig.ak}:${auth.signature}`,
    'Date': auth.date,
    'Content-Type': 'application/octet-stream',
  };

  try {
    const response = await axios.put(url, formData, { headers });
    console.log('Upload success:', response.data);
  } catch (error) {
    console.error('Upload failed:', error);
  }
}

// 调用上传函数
uni.chooseImage({
  count: 1,
  success: res => uploadFileToOBS(res.tempFilePaths[0])
});

注意

  1. 上述代码中的签名计算过程仅为示例,实际应参考华为OBS的官方文档进行正确的签名计算。
  2. uni.chooseImage用于选择文件,你可以根据实际需求调整文件选择逻辑。
  3. 确保在上传前已正确配置并获取了所有必要的认证信息。
  4. 考虑在生产环境中使用更安全的方式存储和访问密钥,如使用IAM角色或临时授权。
回到顶部