上传
将设备文件上传到服务器
[!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) --到源的URLtarget(String) --到目标的URLhttp_status(Number) --HTTP状态码。该属性仅在从HTTP连接接收到相应代码时可用body(String) --响应body。该属性仅在从HTTP连接收到相应时可用exception(String) --异常信息
options参数为一个fileUploadOptions对象,其属性包含以下一项或多项:
fileKey(DOMString) --表单元素的名称,默认为filefileName(DOMString) --在服务器上保存文件时使用的文件名,默认为image.jpghttpMethod(DOMString) --要使用的HTTP方法PUT或POST,默认POSTmimeType(DOMString) --要上传的数据的MIME类型,默认为image/jpegparams(Object) --在HTTP请求中传递的一组可选键/值对,key/value-DOMStringheaders(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
}