8.9 上传

uni.uploadFile(OBJECT)
将本地资源上传到开发者服务器,客户端发起一个 POST 请求,其中 content-type 为 multipart/form-data。
如页面通过 uni.chooseImage 等接口获取到一个本地资源的临时文件路径后,可通过此接口将本地资源上传到指定服务器。另外选择和上传非图像、视频文件参考:https://ask.dcloud.net.cn/article/35547。
在各个小程序平台运行时,网络相关的 API 在使用前需要配置域名白名单。
OBJECT 参数说明
在这里插入图片描述
注意:
 App支持多文件上传,微信小程序只支持单文件上传,传多个文件需要反复调用本API。所以跨端的写法就是循环调用本API。
 hello uni-app中的客服反馈,支持多图上传。uni-app插件市场中也有多个封装的组件。
 App平台选择和上传非图像、视频文件,参考https://ask.dcloud.net.cn/article/35547
网络请求的 超时时间 可以统一在 manifest.json 中配置 networkTimeout。
files参数说明
files 参数是一个 file 对象的数组,file 对象的结构如下:
在这里插入图片描述
示例

uni.chooseImage({
    success: (chooseImageRes) => {
        const tempFilePaths = chooseImageRes.tempFilePaths;
        uni.uploadFile({
            url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
            filePath: tempFilePaths[0],
            name: 'file',
            formData: {
                'user': 'test'
            },
            success: (uploadFileRes) => {
                console.log(uploadFileRes.data);
            }
        });
    }
});

返回值
如果希望返回一个 uploadTask 对象,需要至少传入 success / fail / complete 参数中的一个。例如:

var uploadTask = uni.uploadFile({
    url: 'https://www.example.com/upload', //仅为示例,并非真实接口地址。
    complete: ()=> {}
});
uploadTask.abort();

如果没有传入 success / fail / complete 参数,则会返回封装后的 Promise 对象:Promise 封装
通过 uploadTask,可监听上传进度变化事件,以及取消上传任务。
uploadTask 对象的方法列表
在这里插入图片描述
示例

uni.chooseImage({
    success: (chooseImageRes) => {
        const tempFilePaths = chooseImageRes.tempFilePaths;
        const uploadTask = uni.uploadFile({
            url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
            filePath: tempFilePaths[0],
            name: 'file',
            formData: {
                'user': 'test'
            },
            success: (uploadFileRes) => {
                console.log(uploadFileRes.data);
            }
        });

        uploadTask.onProgressUpdate((res) => {
            console.log('上传进度' + res.progress);
            console.log('已经上传的数据长度' + res.totalBytesSent);
            console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend);

            // 测试条件,取消上传任务。
            if (res.progress > 50) {
                uploadTask.abort();
            }
        });
    }
});

【uniapp参考资料】

(1)uni-app跨平台开发 入门到实战
https://ke.qq.com/course/package/26512

(2)uni-app 完整商城界面设计实战
https://ke.qq.com/course/2381059

(3)基于vue的uniapp商城完整项目源代码
https://ke.qq.com/course/3064977

(4)小白教程资料 http://www.2d5.net

(5)毕业设计网http://www.pc-365.net
(6)小程序编程网www.4317.org

(7)计算机编程网http://www.05423.com/

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐