## uni.uploadFile(OBJECT)
将本地资源上传到开发者服务器,客户端发起一个 POST 请求,其中 content-type 为 multipart/form-data。
如页面通过 uni.chooseImage 等接口获取到一个本地资源的临时文件路径后,可通过此接口将本地资源上传到指定服务器。
**OBJECT 参数说明**
```
参数名 类型 必填 说明 平台支持
url String 是 开发者服务器 url
files Aarry 否 需要上传的文件列表。使用 files 时,filePath 和 name 不生效。 5+App
filePath String 是 要上传文件资源的路径。
name String 是 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
header Object 否 HTTP 请求 Header, header 中不能设置 Referer
formData Object 否 HTTP 请求中其他额外的 form data
success Function 否 接口调用成功的回调函数
fail Function 否 接口调用失败的回调函数
complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)
```
**files参数说明
**
```
files 参数是一个 file 对象的数组,file 对象的结构如下:
name String 否 multipart 提交时,表单的项目名,默认为 file
uri String 是 文件的本地地址
```
**success 返回参数说明**
```
参数 类型 说明
data String 开发者服务器返回的数据
statusCode Number 开发者服务器返回的 HTTP 状态码
```
**返回值**
返回一个 uploadTask 对象,通过 uploadTask,可监听上传进度变化事件,以及取消上传任务。
### uploadTask 对象的方法列表
```
onProgressUpdate callback 监听上传进度变化
abort 中断上传任务
onProgressUpdate 返回参数说明
```
```
参数 类型 说明
progress Number 上传进度百分比
totalBytesSent Number 已经上传的数据长度,单位 Bytes
totalBytesExpectedToSend Number 预期需要上传的数据总长度,单位 Bytes
```
**实战:选择一个照片上传(带进度条)**
```
<template>
<view>
<view>
<progress :percent="percent" stroke-width="10"></progress>
</view>
<view>
<button type="primary" :loading="loading" :disabled="disabled" @click="upload">选择照片</button>
</view>
</view>
</template>
<script>
var _self;
export default {
data:{
percent:0,
loading:false,
disabled:false
},
methods : {
upload : function(){
_self = this;
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: function (res) {
const tempFilePaths = res.tempFilePaths;
const uploadTask = uni.uploadFile({
url : 'https://demo.hcoder.net/index.php?c=uperTest',
filePath: tempFilePaths[0],
name: 'file',
formData: {
'user': 'test'
},
success: function (uploadFileRes) {
console.log(uploadFileRes.data);
}
});
uploadTask.onProgressUpdate(function (res) {
_self.percent = res.progress;
console.log('上传进度' + res.progress);
console.log('已经上传的数据长度' + res.totalBytesSent);
console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend);
});
},
error : function(e){
console.log(e);
}
});
}
},
onLoad:function(){
}
}
</script>
```
**后端文件接收代码(php 版)**
```
<?php
class uperTestController extends witController{
public function index(){
if(!empty($_FILES['file'])){
//获取扩展名
$exename = $this->getExeName($_FILES['file']['name']);
if($exename != 'png' && $exename != 'jpg' && $exename != 'gif'){
exit('不允许的扩展名');
}
$imageSavePath = uniqid().'.'.$exename;
if(move_uploaded_file($_FILES['file']['tmp_name'], $imageSavePath)){
echo $imageSavePath;
}
}
}
public function getExeName($fileName){
$pathinfo = pathinfo($fileName);
return strtolower($pathinfo['extension']);
}
}
```
- 第1讲 : 创建项目、部署 VUE 、入口页面布局
- 第2讲,快速开始第一个项目
- 第3讲 : uni-app 开发规范及目录结构
- 第4讲 : uni-app 页面样式与布局
- 第5讲 : uni-app 配置文件 - pages.json
- 第6讲 : 配置文件 - manifest.json
- 第7讲 : uni-app 页面生命周期
- 第8讲 : uni-app 模板语法 - 数据绑定
- 第9讲Class 与 Style 绑定 (动态菜单激活示例)
- 第10讲 : uni-app 事件处理、事件绑定、事件传参
- 第11讲 : uni-app 组件 - 基础组件
- 第12讲 : uni-app 组件 - 表单组件
- 第13讲 : uni-app 组件 - navigator(导航)及页
- 第14讲 : uni-app 组件 - 媒体组件
- 第15讲 : uni-app 组件 - 地图组件
- 第16讲 : uni-app 接口 - 网络请求
- 第17讲 : uni-app 接口 - 从本地相册选择图片或使
- 第18讲 : uni-app 上传(图片上传实战)
- 第19讲 : uni-app 接口 - 数据缓存
- 第20讲 : uni-app 设备相关
- 第21讲 : uni-app 交互反馈
- 第22讲 : uni-app 设置导航条
- 第23讲 : uni-app 导航(页面流转)
- 第24讲 : uni-app 下拉刷新
- 第25讲 : uni-app 上拉加载更多
- 第26讲 : uni-app 第三方登录(小程序篇)
- 第27讲 : uni-app 登录(h5+ app 篇)
- 第28讲 : 自定义组件创建及使用