uni-app如何上传视频文件(分片上传上去)

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

uni-app如何上传视频文件(分片上传上去)

因为上传的视频文件较大。后端想采用分片的形式接收。所以前端需要对上传的视频进行分片上传。但是在安卓手机和iOS系统上。uni自身的方法行不通。各种报错。api不支持或者获取不到想要的file对象。有懂得朋友提提意见。

image

如果使用uniapp接口。只允许文件上传。视频的接口根本获取不到file对象。

124 回复

大文件切片、分块、分段、分片,可用于分块上传、断点续传(ios、android) :https://ext.dcloud.net.cn/plugin?id=3319


不要打广告哦。我已经使用webview的方式处理了。遇到同样问题的人。需要的人,给我留言。我把代码发给你们。

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:2894488091@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:2834675992@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:253663353@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:897707689@qq.com

大佬,麻烦发一下感谢感谢,1938121877@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:1963530453@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:2361319763@qq.com

大佬,麻烦发一下感谢感谢 1179332650@qq.com

回复 6***@qq.com: 大佬求代码 1332561034@qq.com

回复 b***@163.com: 有拿到的老哥,分享一下 1120046367@qq.com ,感谢啊

回复 1***@qq.com: 有拿到的老哥,分享一下 1120046367@qq.com ,感谢啊

回复 6***@qq.com: 大佬求代码

回复 6***@qq.com: 大佬求代码2471288615@qq.com

回复 6***@qq.com: 大佬可否给一个uniapp切片上传的代码qq 1473058438@qq.com 感谢大佬

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:64757797@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:1782918264@qq.com

回复 6***@qq.com: 大大求代码 1274828542@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:3437723784@qq.com

回复 6***@qq.com: 作者大大求代码 835442257@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:1028629081@qq.com

回复 6***@qq.com: 2389071207@qq.com 麻烦发一份。

回复 6***@qq.com: 作者大大可以参考一下代码吗,十分感谢,邮箱:2211718102@qq.com

回复 6***@qq.com: 感谢大佬 !!邮箱:dzcsama@qq.com

回复 6***@qq.com: 我也需要源代码,谢谢!给我发一份,邮箱地址是climbertian@163.com,谢谢大佬!

回复 6***@qq.com: 邮箱地址climbertian@163.com,求大佬源码,谢谢!

回复 6***@qq.com: 大佬,代码能给一下吗?感谢1043383601@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:839709309@qq.com

回复 6***@qq.com: 邮箱地址514747832@qq.com,求大佬源码,谢谢!

回复 6***@qq.com: 大佬,麻烦发一下感谢感谢 461144191@qq.com

大佬麻烦发一份,谢谢,282664560@qq.com

回复 6***@qq.com: 作者大大,礼貌求代码,十分感谢!!!

回复 6***@qq.com: 大佬 求代码分享 感激不尽 邮箱:1394225561@qq.com

回复 6***@qq.com: 求代码分享,谢谢791879131@qq.com

回复 6***@qq.com: 求代码分享,谢谢464217008@qq.com

回复 6***@qq.com: 求代码分享,谢谢1516554376@qq.com

回复 6***@qq.com: 求代码分享,谢谢 2960549117@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:1091045324@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:35808241@qq.com 感谢!!!

作者大大求代码在此谢谢 邮箱:401157756@qq.com

回复 6***@qq.com: 作者大大求代码 谢谢了 邮箱:2815668146@qq.com

回复 6***@qq.com: 大佬呀 求分享 1091045324@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:1259163451@qq.com 感谢!!!

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:516042245@qq.com

回复 6***@qq.com: 大佬 ,跪求webview app切片上传代码

大佬 ,跪求webview app切片上传代码 984950475@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:475417890@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:1742849781@qq.com

作者大大求代码在此谢谢 邮箱:2878584718@qq.com

回复 6***@qq.com: 哥 求代码 邮箱:469474779@qq.com

回复 6***@qq.com: 作者大大求代码在此谢谢 邮箱:842862970@qq.com

回复 6***@qq.com: 哥 求代码 邮箱:wurui114114@163.com

回复 6***@qq.com: 作者大大我也遇到这个问题了,求代码,谢谢了,邮箱:984784483@qq.com

回复 6***@qq.com: 大佬能不能分享一下,谢谢了,邮箱:2985589070@qq.com

大佬求代码。1059131354@qq.com

回复 6***@qq.com: 1529349250@qq.com,求代码

回复 6***@qq.com: 我我我 ,麻烦大佬了,鄙人万分感谢 1059131354@qq.com

作者大大求代码在此谢谢 邮箱:2823363390@qq.com

有拿到的老哥,分享一下 1120046367@qq.com ,感谢啊

回复 1***@qq.com: 有拿到的老哥,分享一下 1091045324@qq.com ,感谢啊

大佬,求代码分享,万分感谢~~邮箱:506813017@qq.com

大佬求分享,2667507070@qq.com

大佬求分享,542396468@qq.com

大佬,webview怎么上传大视频了

大佬,webview怎么上传大视频了 511568425@qq.com

作者大大求分享分片解决方案,1348243182@qq.com

大佬,求代码分享,万分感谢~~邮箱:1251752648@qq.com

大佬,求代码,感激不尽543061231@qq.com

作者大大求代码在此谢谢 邮箱:1007006460@qq.com

大佬求分享,huangjiajin_work@163.com

正好需要,dddddl7@outlook.com

求大佬1654848119@qq.com

你好,能发我一份代码吗?最近要做这个功能,我想参考下, 邮箱是2855952328@qq.com

大佬,求代码分享,万分感谢 邮箱:1653223839@qq.com

大佬求分享,谢谢。1335430646@qq.com

大佬,求代码分享,万分感谢~~邮箱:wex521102@163.com

作者大大求代码在此谢谢 邮箱:1278493286@qq.com

作者大大求代码在此谢谢 邮箱:577450040@qq.com

呜呜呜这个问题困扰我大半个月了,求! 3021129754@qq.com

有拿到的老哥,分享一下 1120046367@qq.com ,感谢啊

有拿到的老哥,分享一下 1120046367@qq.com ,感谢啊

同求598132561@qq.com

作者大大求代码在此谢谢 邮箱:3437723784@qq.com

大佬,分享代码,谢谢!邮箱地址:1651684737@qq.com 谢谢啦!

上传成功返回的格式为json就可以了!

大佬625758279@qq.com

大佬求一下源码,2657544620@qq.com,谢谢

大佬,麻烦发一下感谢感谢,892764762@qq.com

大佬,麻烦发一下感谢感谢,2740945148@qq.com

求大佬发一份,812292994@qq.com

有拿到的大佬吗 求发一份 2806904697@qq.com

求发一份,liying66220@163.com 谢谢

大佬,求代码分享,万分感谢~~邮箱:599657495@qq.com

大佬,求分享代码,1743260507@qq.cm

有拿到的老哥,分享一下 1091045324@qq.com ,感谢啊

有拿到的老哥,分享一下1421101050@qq.com ,感谢啊

求分享呀大佬,861497102@qq.com

大佬,求代码分享 ,十分感谢 13861618201@163.com

作者大大求代码在此谢谢 邮箱:wurui114114@163.com

作者大大求代码在此谢谢 邮箱:2878584718@qq.com

作者大大求代码在此谢谢 邮箱:1005525953@qq.com, 是用webview 模拟input文件输出吗,还是webview可以直接使用fileRender的readAsArrayBuffer?

求代码分享 ,十分感谢 ,21839583@qq.com

大佬们,可以给我也整一份代码吗,2216296981@qq.com 给常感谢

作者大大求代码在此谢谢 邮箱:2663282851@qq.com

大佬求代码。1059131354@qq.com

作者大大求代码在此谢谢 邮箱:2294850910@qq.com

大佬求代码。1059131354@qq.com

大佬求代码分享。3655606@qq.com

大佬求代码分享。1343467494@qq.com

大佬求分享,2236684510@qq.com

作者大大,急需求分享。1059131354@qq.com

在uni-app中实现视频文件的分片上传,需要结合前端和后端共同完成。以下是一个简要的实现思路和代码案例,主要关注前端uni-app部分,假设后端已经提供了相应的分片接收接口。

前端实现步骤

  1. 选择视频文件:使用<input type="file">或uni-app的文件选择器组件来选择视频文件。

  2. 读取文件信息:通过FileReader获取视频文件的大小,以便计算分片大小。

  3. 分片上传:将视频文件按指定大小进行分片,并逐个上传到服务器。

  4. 合并分片:服务器接收完所有分片后,进行合并操作(这一步通常在服务器端完成,前端不需要处理)。

代码案例

// 假设在页面的data中定义了以下变量
data() {
    return {
        videoFile: null, // 存储选中的视频文件
        chunkSize: 2 * 1024 * 1024, // 每片2MB
        totalChunks: 0, // 总片数
        uploadedChunks: 0, // 已上传片数
    };
}

// 选择视频文件
chooseVideo() {
    uni.chooseVideo({
        success: (res) => {
            this.videoFile = res.tempFilePath;
            this.uploadVideo();
        },
    });
}

// 上传视频
uploadVideo() {
    const file = uni.getFileSystemManager().getFile({
        filePath: this.videoFile,
        encoding: 'binary',
        success: (res) => {
            const fileSize = res.size;
            this.totalChunks = Math.ceil(fileSize / this.chunkSize);

            for (let chunkIndex = 0; chunkIndex < this.totalChunks; chunkIndex++) {
                const start = chunkIndex * this.chunkSize;
                const end = Math.min(start + this.chunkSize, fileSize);
                const chunk = res.data.slice(start, end);

                this.uploadChunk(chunk, chunkIndex);
            }
        },
    });
}

// 上传分片
uploadChunk(chunk, chunkIndex) {
    uni.uploadFile({
        url: 'https://your-server.com/upload-chunk', // 替换为你的服务器接口
        filePath: '', // 不需要填写,因为我们要直接上传二进制数据
        name: 'file',
        file: chunk, // 直接传入二进制数据
        formData: {
            chunkIndex: chunkIndex,
            totalChunks: this.totalChunks,
            fileName: this.videoFile.split('/').pop(), // 提取文件名
        },
        success: () => {
            this.uploadedChunks++;
            if (this.uploadedChunks === this.totalChunks) {
                console.log('上传完成');
            }
        },
        fail: (err) => {
            console.error('上传失败', err);
        },
    });
}

注意事项

  • 错误处理:需要添加更多的错误处理逻辑,如重试机制、上传进度显示等。
  • 跨域问题:如果前后端分离部署,需要处理跨域请求问题。
  • 安全性:确保上传接口的安全性,避免恶意文件上传。

上述代码是一个简化的实现,具体项目中可能需要根据实际情况进行调整和优化。

回到顶部