uploader
常见问题
我要提意见
Uploader模块管理网络上传任务,用于从本地上传各种文件到服务器,并支持跨域访问操作。通过plus.uploader可获取上传管理对象。Uploader上传使用HTTP的POST方式提交数据,数据格式符合Multipart/form-data规范,即rfc1867(Form-based File Upload in HTML)协议。
createUpload
: 新建上传任务
clear
: 清除上传任务
enumerate
: 枚举上传任务
startAll
: 开始所有上传任务
Upload
: Upload对象管理一个上传任务
UploadEvent
: 上传任务事件类型
UploadState
: 上传任务的状态,Number类型
UploadOptions
: JSON对象,创建上传任务的参数
UploadFileOptions
: JSON对象,添加上传文件的参数
回调方法:
UploadCompletedCallback
: 上传任务完成时的回调函数
UploadStateChangedCallback
: 上传任务状态变化回调函数,在上传任务状态发生变化时调用
UploadEnumerateCallback
: 枚举上传任务回调函数,在枚举上传任务完成时时调用
5+功能模块(permissions)
// ...
"permissions":{
// ...
"Uploader": {
"description": "文件上传,管理文件上传任务"
新建上传任务
Upload plus.uploader.createUpload( url, options, completedCB );
请求上传管理创建新的上传任务,创建成功则返回Upload对象,用于管理上传任务。
String
必选 要上传文件的目标地址
上传服务器的url地址,仅支持http或https协议。
允许创建多个相同url地址的上传任务。
options:
UploadOptions
可选 上传任务的参数
可通过此参数设置定义上传任务属性,如请求类型、上传优先级等。
completedCB:
UploadCompletedCallback
可选 上传任务完成回调函数
当上传任务提交完成时触发,成功或失败都会触发。
Upload
: Upload对象
示例:
// 创建上传任务
function createUpload() {
var task = plus.uploader.createUpload( "http://www.test.com/upload.do",
{ method:"POST",priority:100 },
function ( t, status ) {
// 上传完成
if ( status == 200 ) {
alert( "Upload success: " + t.url );
} else {
alert( "Upload failed: " + status );
task.addFile( "_www/a.doc", {key:"testdoc"} );
task.addData( "string_key", "string_value" );
//task.addEventListener( "statechanged", onStateChanged, false );
task.start();
uni-app使用plus注意事项
清除上传任务
plus.uploader.clear( state );
清除指定状态的上传任务。
-
state:
UploadState
可选 清除上传任务的状态
如果未指定state值,则清除所有未完成的上传任务。
: 无
枚举上传任务
plus.uploader.enumerate( enumCB, state );
枚举指定状态的上传任务列表,通过enumCB回调函数返回结果。
-
enumCB:
UploadEnumerateCallback
必选 枚举上传任务回调函数
枚举上传任务完成时触发。
-
state:
UploadState
可选 枚举上传任务的状态
如果未指定state值,则枚举所有未完成的上传任务。
: 无
示例:
// 枚举上传任务
function enumerateUpload() {
plus.uploader.enumerate( function ( tasks ) {
alert( "Unfinished task count: " + tasks.length );
uni-app使用plus注意事项
开始所有上传任务
plus.uploader.startAll();
开始所有处于未开始调度或暂停状态的上传任务。
若上传任务数超过可并发处理的总数,超出的任务处于调度状态(等待上传),当有任务完成时根据调度状态任务的优先级选择任务开始上传。
: 无
Upload对象管理一个上传任务
interface Upload {
readonly attribute String url;
readonly attribute Number state;
readonly attribute UploadOptions options;
readonly attribute String responseText;
readonly attribute Number uploadedSize;
readonly attribute Number totalSize;
function void abort();
function Boolean addData( String key, String value );
function void addEventListener( String event, function Callback listener, Boolean capture );
function Boolean addFile( String path, UploadFileOptions options );
function String getAllResponseHeaders();
function String getResponseHeader( headerName );
function void pause();
function void resume();
function void setRequestHeader( String headerName, String headerValue );
function void start();
id
: 上传任务的标识
url
: 上传文件的服务器地址
state
: 任务的状态
options
: 上传任务的参数
responseText
: 上传任务完成后服务器返回的数据
uploadedSize
: 已完成上传数据的大小)
totalSize
: 上传数据的总大小
addFile
: 添加上传文件
addData
: 添加上传数据
start
: 开始上传任务
pause
: 暂停上传任务
resume
: 恢复暂停的上传任务
abort
: 取消上传任务
addEventListener
: 添加上传任务事件监听器
getAllResponseHeaders
: 获取上传请求HTTP响应头部信息
getResponseHeader
: 获取上传请求指定的HTTP响应头部的值
setRequestHeader
: 设置上传请求的HTTP头数据
上传任务的标识
download.id;
String
在创建任务时系统自动分配,用于标识上传任务的唯一性。
上传文件的服务器地址
upload.url;
String
调用plus.uploader.createUpload()方法创建上传任务时设置的值。
任务的状态
upload.state;
Number
上传任务的状态,参考UploadState,在UploadCompleteCallback事件和UploadStateChangedCallback事件触发时更新。
上传任务的参数
upload.options;
UploadOptions
上传任务配置的参数,参考UploadOptions。
上传任务完成后服务器返回的数据
upload.responseText;
String
表示当前上传任务的状态,可通过addEventListener()方法监听statechanged事件监听任务状态的变化。
已完成上传数据的大小)
upload.UploadedSize;
Number
整数类型,单位为字节(byte),上传任务开始传输数据时,每次触发statechanged事件或上传任务完成更新。
上传数据的总大小
upload.totalSize;
Number
整数类型,单位为字节(byte),上传任务开始传输数据时更新。
添加上传文件
Boolean upload.addFile( path, options );
向上传任务中添加文件,必须在任务开始上传前调用。
以下情况会导致添加上传文件失败:
1. options参数中指定的key在任务中已经存在,则添加失败返回false;
2. path参数指定的文件路径不合法或文件不存在,则添加失败返回false;
3. 上传任务已经开始调度,调用此方法则添加失败返回false。
-
path:
String
必选 添加上传文件的路径
仅支持本地文件路径。
-
options:
UploadFileOptions
必选 要添加上传文件的参数
可通过此参数设置上传任务属性,如文件标识、文件名称、文件类型等。
Boolean
添加文件成功返回true,失败则返回false。
// 创建上传任务
function createUpload() {
var task = plus.uploader.createUpload( "http://www.test.com/upload.do", {}, function ( t, status ) {
// 上传完成
if ( status == 200 ) {
alert( "Upload success: " + t.url );
} else {
alert( "Upload failed: " + status );
task.addFile( "_www/a.doc", {key:"testdoc"} );
task.addData( "string_key", "string_value" );
//task.addEventListener( "statechanged", onStateChanged, false );
task.start();
uni-app使用plus注意事项
添加上传数据
Boolean upload.addData( key, value );
向上传任务中添加数据,必须在任务开始上传前调用。
以下情况会导致添加上传文件失败:
1. key参数中指定的键名在任务中已经存在,则添加失败返回false;
2. 上传任务已经开始调度,调用此方法则添加失败返回false。
String
必选 添加上传数据的键名
-
value:
String
必选 添加上传数据的键值
Boolean
添加成功返回true,失败则返回false。
// 创建上传任务
function createUpload() {
var task = plus.uploader.createUpload( "http://www.test.com/upload.do", {}, function ( t, status ) {
// 上传完成
if ( status == 200 ) {
alert( "Upload success: " + t.url );
} else {
alert( "Upload failed: " + status );
task.addFile( "_www/a.doc", {key:"testdoc"} );
task.addData( "string_key", "string_value" );
//task.addEventListener( "statechanged", onStateChanged, false );
task.start();
uni-app使用plus注意事项
开始上传任务
void upload.start();
开始调度上传任务,如果任务已经处于开始状态则无任何响应。
在创建任务或任务上传失败后调用可重新开始上传。
: 无
示例:
// 创建上传任务
function createUpload() {
var task = plus.uploader.createUpload( "http://www.test.com/upload.do", {}, function ( t, status ) {
// 上传完成
if ( status == 200 ) {
alert( "Upload success: " + t.url );
} else {
alert( "Upload failed: " + status );
task.addFile( "_www/a.doc", {key:"testdoc"} );
task.addData( "string_key", "string_value" );
//task.addEventListener( "statechanged", onStateChanged, false );
task.start();
uni-app使用plus注意事项
暂停上传任务
void upload.pause();
暂停上传任务,如果任务已经处于初始状态或暂停状态则无任何响应。
: 无
示例:
var task=null;
// 创建上传任务
function createUpload() {
var task = plus.uploader.createUpload( "http://www.test.com/upload.do", {}, function ( t, status ) {
// 上传完成
if ( status == 200 ) {
alert( "Upload success: " + t.url );
} else {
alert( "Upload failed: " + status );
task.addFile( "_www/a.doc", {key:"testdoc"} );
task.addData( "string_key", "string_value" );
//task.addEventListener( "statechanged", onStateChanged, false );
task.start();
// 暂停上传任务
function pauseUpload() {
task.pause();
uni-app使用plus注意事项
恢复暂停的上传任务
void upload.resume();
继续暂停的上传任务,如果任务处于非暂停状态则无任何响应。
: 无
示例:
var task = null;
// 创建上传任务
function createUpload() {
var task = plus.uploader.createUpload( "http://www.test.com/upload.do", {}, function ( t, status ) {
// 上传完成
if ( status == 200 ) {
alert( "Upload success: " + t.url );
} else {
alert( "Upload failed: " + status );
task.addFile( "_www/a.doc", {key:"testdoc"} );
task.addData( "string_key", "string_value" );
//task.addEventListener( "statechanged", onStateChanged, false );
task.start();
// 暂停上传任务
function pauseUpload() {
task.pause();
// 恢复上传任务
function resumeUpload() {
task.resume();
uni-app使用plus注意事项
取消上传任务
void upload.abort();
如果任务未完成,则终止上传,并从任务列表中删除。
: 无
示例:
var task = null;
// 创建上传任务
function createUpload() {
var task = plus.uploader.createUpload( "http://www.test.com/upload.do", {}, function ( t, status ) {
// 上传完成
if ( status == 200 ) {
alert( "Upload success: " + t.url );
} else {
alert( "Upload failed: " + status );
task.addFile( "_www/a.doc", {key:"testdoc"} );
task.addData( "string_key", "string_value" );
//task.addEventListener( "statechanged", onStateChanged, false );
task.start();
// 暂停上传任务
function pauseUpload() {
task.pause();
// 取消上传任务
function abortUpload() {
task.pause();
uni-app使用plus注意事项
添加上传任务事件监听器
void upload.addEventListener( type, listener, capture );
上传任务添加事件监听器后,当监听的事件发生时触发listener回调。
-
type:
UploadEvent
必选 事件类型
-
listener:
UploadStateChangedCallback
必选 事件监听器回调函数
当监听的事件发生时,触发设置的回调函数。
-
capture:
Boolean
可选 事件流处理顺序,暂不支持
: 无
示例:
var task = null;
// 监听上传任务状态
function onStateChanged( upload, status ) {
if ( upload.state == 4 && status == 200 ) {
// 上传完成
alert( "Upload success: " + upload.getFileName() );
// 创建上传任务
function createUpload() {
var task = plus.uploader.createUpload( "http://www.test.com/upload.do" );
task.addFile( "_www/a.doc", {key:"testdoc"} );
task.addData( "string_key", "string_value" );
task.addEventListener( "statechanged", onStateChanged, false );
task.start();
// 暂停上传任务
function pauseUpload() {
task.pause();
// 取消上传任务
function abortUpload() {
task.abort();
uni-app使用plus注意事项
获取上传请求HTTP响应头部信息
String upload.getAllResponseHeaders();
HTTP响应头部全部内容作为未解析的字符串返回,如果没有接收到这个HTTP响应头数据或者上传请求未完成则为空字符串。
String
: HTTP响应头数据
示例:
var task = null;
// 监听上传任务状态
function onStateChanged( upload, status ) {
if ( upload.state == 4 && status == 200 ) {
// 获取上传请求响应头数据
console.log(upload.getAllResponseHeaders());
// 上传完成
alert( "Upload success: " + upload.getFileName() );
// 创建上传任务
function createUpload() {
var task = plus.uploader.createUpload( "http://www.test.com/upload.do" );
task.addFile( "_www/a.doc", {key:"testdoc"} );
task.addData( "string_key", "string_value" );
task.addEventListener( "statechanged", onStateChanged, false );
task.start();
uni-app使用plus注意事项
获取上传请求指定的HTTP响应头部的值
String upload.getResponseHeader( headerName );
其参数是要返回的HTTP响应头部的名称,可以使用任何大小写来制定这个头部名字,和响应头部的比较是不区分大小写的。
如果没有接收到这个头部或者伤处请求未完成则为空字符串;如果接收到多个有指定名称的头部,这个头部的值被连接起来并返回,使用逗号和空格分隔开各个头部的值。
-
headerName:
String
可选 HTTP响应头数据名称
String
: HTTP响应头数据值
示例:
var task = null;
// 监听上传任务状态
function onStateChanged( upload, status ) {
if ( upload.state == 4 && status == 200 ) {
// 获取上传请求响应头中的Content-Type值
console.log(dtask.getResponseHeader("Content-Type"));
// 上传完成
alert( "Upload success: " + upload.getFileName() );
// 创建上传任务
function createUpload() {
var task = plus.uploader.createUpload( "http://www.test.com/upload.do" );
task.addFile( "_www/a.doc", {key:"testdoc"} );
task.addData( "string_key", "string_value" );
task.addEventListener( "statechanged", onStateChanged, false );
task.start();
uni-app使用plus注意事项
设置上传请求的HTTP头数据
void upload.setRequestHeader( headerName, headerValue );
Http的Header应该包含在通过后续start()调用而发起的请求中,此方法必需在调用start()之前设置才能生效。
如果带有指定名称的头部已经被指定了,这个头部的新值就是:之前指定的值,加上逗号、以及这个调用指定的值(形成一个数组)。
-
headerName:
String
必选 HTTP请求的头数据名称
-
headerValue:
String
必选 HTTP请求的头数据值
: 无
平台支持:
-
Android
- 2.2+
不支持设置“Content-Type”、“User-Agent”、“Cookie”的值。
- 5.1+
不支持设置“Content-Type”、“User-Agent”的值。
var task = null;
// 监听上传任务状态
function onStateChanged( upload, status ) {
if ( upload.state == 4 && status == 200 ) {
// 获取上传请求响应头中的Content-Type值
console.log(dtask.getResponseHeader("Content-Type"));
// 上传完成
alert( "Upload success: " + upload.getFileName() );
// 创建上传任务
function createUpload() {
var task = plus.uploader.createUpload( "http://www.test.com/upload.do" );
task.addFile( "_www/a.doc", {key:"testdoc"} );
task.addData( "string_key", "string_value" );
// 设置自定义数据头
task.setRequestHeader('Customer','CustomerValue/XXXXXXXXXXXX');
task.addEventListener( "statechanged", onStateChanged, false );
task.start();
uni-app使用plus注意事项
上传任务事件类型
-
"statechanged":
(
String
)
上传任务状态变化事件
当上传任务状态发生变化时触发此事件,事件原型参考UploadStateChangedCallback。
var task = null;
// 监听上传任务状态
function onStateChanged( upload, status ) {
if ( upload.state == 4 && status == 200 ) {
// 上传完成
alert( "Upload success: " + upload.getFileName() );
// 创建上传任务
function createUpload() {
var task = plus.uploader.createUpload( "http://www.test.com/upload.do" );
task.addFile( "_www/a.doc", {key:"testdoc"} );
task.addData( "string_key", "string_value" );
task.addEventListener( "statechanged", onStateChanged, false );
task.start();
// 暂停上传任务
function pauseUpload() {
task.pause();
// 取消上传任务
function abortUpload() {
task.abort();
uni-app使用plus注意事项
上传任务的状态,Number类型
-
undefined:
(
undefined
)
上传任务未开始
通过plus.uploader.createUpload()方法创建上传任务后的初始状态,此时可调用其start()方法开始上传。
-
0:
(
number
)
上传任务开始调度
调用上传任务的start()方法之后处于此状态,此时上传任务处于可调度上传状态。
-
1:
(
number
)
上传任务开始请求
上传任务建立网络连接,发送请求到服务器并等待服务器的响应。
-
2:
(
number
)
上传任务请求已经建立
上传任务网络连接已建立,服务器返回响应,准备传输数据内容。
-
3:
(
number
)
上传任务提交数据
上传任务提交数据,监听statechanged事件时可多次触发此状态。
-
4:
(
number
)
上传任务已完成
上传任务完成数据提交并断开连接,上传成功或失败都会设置为此状态。
-
5:
(
number
)
上传任务已暂停
调用上传任务的pause()方法将任务暂停,此时可调用其resume()方法重新开始上传。
-
-1:
(
number
)
枚举任务状态
非上传任务状态,泛指所有上传任务的状态,用于enumerate()和clear()操作时指定作用于所有上传任务。
JSON对象,创建上传任务的参数
-
blocksize:
(
Number
)
【已废弃】支持断点续传时,上传任务每次上传的文件块大小
数值类型,单位为Byte(字节),默认值为102400,若设置值小于等于0则表示不分块上传。
-
chunkSize:
(
Number
)
分块上传的大小
单位为Kb,设置值小于等于0则不分块上传,默认为不分块上传。
Android平台需设置分块上传才能准确触发statechanged返回上传进度,如果不设置分块上传则在开始后快速返回上传完成进度,而实际并没有上传完。
注意:分块上传需要服务器支持,如果服务器不支持则会上传失败。
-
Android - ALL (支持)
-
iOS - ALL (不支持)
忽略此属性
-
method:
(
String
)
网络请求类型
仅支持http协议的“POST”请求。
-
priority:
(
Number
)
上传任务的优先级
数值类型,数值越大优先级越高,默认优先级值为0。
-
retry:
(
Number
)
上传任务重试次数
数值类型,默认为重试3次。
-
retryInterval:
(
Number
)
上传任务重试间隔时间
数值类型,单位为s(秒),默认值为30s。
-
timeout:
(
Number
)
上传任务超时时间
数值类型,单位为s(秒),默认值为120s。
超时时间为服务器响应请求的时间(不是上传任务完成的总时间),如果设置为0则表示永远不超时。
JSON对象,添加上传文件的参数
-
key:
(
String
)
文件键名
上传文件在上传任务中的键名,默认值为为文件名称。
上传任务中如果已经存在相同key的上传文件或数据将导致添加文件失败。
-
name:
(
String
)
文件名称
上传文件的名称,默认值为上传文件路径中的名称。
-
mime:
(
String
)
文件类型
上传文件的类型(如图片文件为“image/jpeg”),默认值自动根据文件后缀名称生成。
上传任务完成时的回调函数
void uploadCompleted( Upload upload, Number status ) {
// File upload completed code.
在上传任务完成时调用,上传任务失败也将触发此回调。
-
upload:
Upload
必选 上传任务对象
-
status:
Number
必选 上传结果状态码
HTTP传输协议状态码,如果未获取传输状态则其值则为0,如上传成功其值通常为200。
: 无
上传任务状态变化回调函数,在上传任务状态发生变化时调用
void onStateChanged( Upload upload, status ) {
// Upload state changed code.
-
upload:
Upload
必选 上传任务对象
-
status:
Number
必选 上传结果状态码
HTTP传输协议状态码,如果未获取传输状态则其值则为0,如上传成功其值通常为200。
: 无
枚举上传任务回调函数,在枚举上传任务完成时时调用
void onEnumerated( Upload[] uploads ) {
// Upload enumerate completed code.
-
uploads:
Array
[
Upload
]
必选 枚举到的上传任务对象数组
京ICP备12046007号-5