上传

将设备文件上传到服务器

[!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 //未修改
    • 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方法PUTPOST,默认POST
  • mimeType(DOMString) --要上传的数据的MIME类型,默认为image/jpeg
  • params(Object) --在HTTP请求中传递的一组可选键/值对,key/value-DOMString
  • headers(Object) --标题名称/标题值的映射,使用数组来制定多个值。在iosAndroid上,如果存在名为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
}

results matching ""

    No results matching ""