uni-app app端获取blob数据流 或者分片上传oss

发布于 1周前 作者 gougou168 来自 Uni-App

uni-app app端获取blob数据流 或者分片上传oss

3 回复

做过类似的插件, Q 1196097915


可以做,联系微信:zhimitec 专业的uniapp插件/项目外包团队为您服务, 可签订合同、提供发票,售后无忧

在uni-app中实现获取Blob数据流并进行分片上传至阿里云OSS(Object Storage Service),可以通过以下步骤完成。以下代码案例展示了如何实现这一过程。

1. 获取Blob数据流

在uni-app中,你可以通过uni.chooseImageuni.chooseVideo接口选择文件,然后通过uni.getFileSystemManager().readFile读取文件内容并获取Blob数据。

uni.chooseImage({
    count: 1,
    success: (res) => {
        const filePath = res.tempFilePaths[0];
        const fs = uni.getFileSystemManager();
        
        fs.readFile({
            filePath,
            encoding: 'binary',
            success: (data) => {
                const blob = data.data; // Blob数据流
                // 处理Blob数据,例如进行分片上传
                uploadToOSS(blob, filePath);
            },
            fail: (err) => {
                console.error('读取文件失败', err);
            }
        });
    },
    fail: (err) => {
        console.error('选择文件失败', err);
    }
});

2. 分片上传至OSS

为了进行分片上传,你需要先将Blob数据分割成多个小块,然后逐一上传。以下是一个简化的分片上传示例:

function uploadToOSS(blob, filePath) {
    const OSS = require('ali-oss'); // 引入ali-oss SDK
    const client = new OSS({
        region: '<your-oss-region>',
        accessKeyId: '<your-accessKeyId>',
        accessKeySecret: '<your-accessKeySecret>',
        bucket: '<your-bucket-name>'
    });

    const chunkSize = 5 * 1024 * 1024; // 每片5MB
    const totalSize = blob.length;
    const chunks = Math.ceil(totalSize / chunkSize);

    for (let i = 0; i < chunks; i++) {
        const start = i * chunkSize;
        const end = Math.min(start + chunkSize, totalSize);
        const chunk = blob.slice(start, end);

        client.put(`uploads/${filePath.split('/').pop()}_part${i}`, chunk)
            .then(res => {
                console.log(`分片${i}上传成功`, res);
                // 可以在这里记录每个分片的ETag,用于后续的完成分片上传
            })
            .catch(err => {
                console.error(`分片${i}上传失败`, err);
            });
    }
    // 注意:这里缺少了完成分片上传的逻辑,需要根据阿里云的文档实现
}

注意事项

  1. SDK引入:上述代码中使用了ali-oss SDK,你需要在项目中引入该SDK。
  2. 分片完成:上述代码只展示了分片上传的过程,缺少了完成分片上传的逻辑。你需要根据阿里云的OSS文档,收集所有分片的ETag,然后调用completeMultipartUpload接口完成分片上传。
  3. 错误处理:在实际应用中,你需要更完善的错误处理逻辑,比如重试机制、上传进度显示等。

上述代码为简化的示例,用于展示基本的实现思路。根据实际需求,你可能需要进一步优化和调整。

回到顶部