上传
将设备文件上传到服务器
[!TIP|labelVisibility:hidden|iconVisibility:hidden] upload(fileURL,server,successCallback,errorCallback,options,trustAllHosts)
支持平台:
- Android
- iOS
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
fileURL | String | 是 | 设备上的文件URL ,也支持文件的完整路径file:///和cdvfile:// |
server | String | 是 | 接收文件的服务器的URL ,由编码encodeURI() 转换得到 |
successCallback | Function | 否 | 上传成功时的回调函数 |
errorCallback | Function | 否 | 上传失败时的回调函数 |
options | Object | 否 | fileUploadOptions 对象 |
trustAllHosts | Boolean | 否 | 默认为false ,设置为true 表示接收所有安全证书。(Android 拒绝自签名安全证书) |
successCallback
返回参数说明:
fileUploadResult
(对象) -- 上传成功FileUploadResult
对象,其属性包含以下一项或多项:bytesSent
(Number) --作为上传的一部分发送到服务器的字节数responseCode
(Number) --服务器返回的HTTP
相应代码response
(String) --服务器返回的HTTP
响应headers
(Object) --服务器的HTTP
响应头Last-Modified
(String) --响应HTTP报头包含在其原始服务器认为该资源的最后修改日期和时间。它被用作验证器来确定接收或存储的资源是否相同Etag
(String) --HTTP响应头是资源的特定版本的标识符Accept-Ranges
(String) --响应的 HTTP 标头是由服务器使用以通告其支持部分请求的标志物。此字段的值表示可用于定义范围的单位Content-Type
(String) --实体头用于指示所述媒体类型的资源的Content-Length
(String) --实体报头指示该实体主体的大小,以字节为单位的十进制数,发送到接收方Date
(String) --通用 HTTP 报头包含在该消息起源的日期和时间
errorCallback
返回参数说明:
fileTransferError
(对象) -- 错误结果FileTransferError
对象,其属性包含以下一项或多项:code
(Number) --错误代码之一:- 1 =
FileTransferError.FILE_NOT_FOUND_ERR
//找不到文件 - 2 =
FileTransferError.INVALID_URL_ERR
//无效的URL - 3 =
FileTransferError.CONNECTION_ERR
//连接错误 - 4 =
FileTransferError.ABORT_ERR
//连接已中止 - 5 =
FileTransferError.NOT_MODIFIED_ERR
//未修改
- 1 =
source
(String) --到源的URL
target
(String) --到目标的URL
http_status
(Number) --HTTP
状态码。该属性仅在从HTTP
连接接收到相应代码时可用body
(String) --响应body
。该属性仅在从HTTP连接收到相应时可用exception
(String) --异常信息
options
参数为一个fileUploadOptions
对象,其属性包含以下一项或多项:
fileKey
(DOMString) --表单元素的名称,默认为file
fileName
(DOMString) --在服务器上保存文件时使用的文件名,默认为image.jpg
httpMethod
(DOMString) --要使用的HTTP
方法PUT
或POST
,默认POST
mimeType
(DOMString) --要上传的数据的MIME类型,默认为image/jpeg
params
(Object) --在HTTP
请求中传递的一组可选键/值对,key/value-DOMString
headers
(Object) --标题名称/标题值的映射,使用数组来制定多个值。在ios
和Android
上,如果存在名为Content-Type
的标头,则不会使用多部分表单数据
[!WARNING]
fileURL
含有中文需要encodeURI()
转换;- 文件选择对应的
mimeType
;
示例代码1
// 引用js
<script src='supconit://hcmobile.js'></script>
<script>
// 监听’deviceready‘事件
document.addEventListener('deviceready', onDeviceReady, false)
function onDeviceReady(){
var fileURL = "file:///var/mobile/Containers/Data/Application/BE95F695-F32F-408B-9F67-3AC3448D444C/Library/Caches/com.supconit.hcmobile.ios/images/u=1078861629,3747050294&fm=26&gp=0.jpg";
var uri = encodeURI("http://10.10.21.3:8080/hot/uploader/offline/");
var win = function (r) {
alert(JSON.stringify(r))
}
var fail = function (error) {
alert(JSON.stringify(error))
}
var options = new FileUploadOptions();
options.fileKey = "f";
options.fileName = "test";
options.mimeType = "image/jpg";
var params = {};
params.value1 = "test";
params.value2 = "param";
options.params = params;
var ft = new FileTransfer();
ft.upload(fileURL, uri, win, fail, options);
}
</script>
示例代码2
// 引用js
<script src='supconit://hcmobile.js'></script>
<script>
// 监听’deviceready‘事件
document.addEventListener('deviceready', onDeviceReady, false)
function onDeviceReady(){
fileURL = "cdvfile://localhost/sdcard/DCIM/Video/V71130-160549.mp4";
// fileURL = "file:///storage/emulated/0/DCIM//Video/V71130-160549.mp4";
// fileURL = "/storage/emulated/0/DCIM//Video/V71130-160549.mp4";
var uri = encodeURI("http://192.168.42.227:8080/hybrid/upload");
var options = new FileUploadOptions();
options.fileKey="f";
options.fileName = "test";
options.mimeType="video/mp4";
var headers={'Accept':'video/mp4'};
options.headers = headers;
var ft = new FileTransfer();
ft.onprogress = function(progressEvent) {
if (progressEvent.lengthComputable) {
percent = progressEvent.loaded / progressEvent.total*100;
console.log("上传百分比:"+percent+"%");
}
};
var win = function (r) {
alert("bytesSent: "+r.bytesSent+"\n responseCode :"+r.responseCode+"\n response: "+r.response);
}
var fail = function (error) {
alert("source: "+error.source+"\n target :"+error.target+"\n code: "+error.code+"\n http\_status: "+error.http_status+"\n body: "+error.body+"\n exception : "+error.exception);
}
ft.upload(fileURL, uri, win, fail, options);
}
</script>
响应成功示例代码:
{
"responseCode": 200,
"headers": {
"Last-Modified": "Wed, 09 Dec 2020 09:45:09 GMT",
"Etag": "W/\"21092-1607507109077\"",
"Accept-Ranges": "bytes",
"Content-Type": "text/html",
"Content-Length": "21092",
"Date": "Tue, 05 Jan 2021 06:39:18 GMT"
},
"response": "<!DOCTYPE html>\n<html>\n\n<head>\n <meta charset=\"utf-8\">\n <title>移动应用平台_首页</title>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n <!--<meta http-equiv=\"Content-Security-Policy\"-->\n <!--content=\"default-src n }\n\n , </script>\n</html>\n",
"bytesSent": 82777
}
响应失败示例代码:
{
"code": 3,
"source": "file:///var/mobile/Containers/Data/Application/BE95F695-F32F-408B-9F67-3AC3448D444C/Library/Caches/com.supconit.hcmobile.ios/images/u=1078861629,3747050294&fm=26&gp=0.jpg",
"target": "http://192.168.42.227:8080/hybrid/upload",
"http_status": null,
"body": null,
"exception": null
}