使用cordova-plugin-file-transfer的文件上传无法在Android上运行,仅适用于iOS

时间:2017-01-26 17:50:07

标签: android cordova ionic2

有没有人知道可能是什么问题?在过去的几周里,我一直试图弄清楚为什么我的代码仅适用于iOS,而不适用于Android设备。任何想法都会得到高度赞赏,因为我没有选择。

在Android设备上它显示发送文件但在服务器上我没有收到任何信息(图片也没有其他参数)。另一方面,在iOS上一切正常,服务器也是。

我的代码:

home.html的:

<button ion-button color="dark" (click)="takePhoto()">Open camera </button>
<img [src]="imageURL" *ngIf="imageURL" />
<br>imageURL={{imageURL}}
<br><button ion-button color="dark" (click)="upload()">Upload</button>

home.ts:

@Component({
      selector: 'page-home',
      templateUrl: 'home.html'
})
export class HomePage {
    imageURL: any;
    myInput: string;
    cameraUrl: string;

    constructor(public navCtrl: NavController) {
    }

   takePhoto(){
       Camera.getPicture().then((imageData) => {
            this.imageURL = imageData;
       }, (err) => {
            console.log(err);
       });
   }
   upload(){
       var ft = new Transfer();
       var options = {
       fileKey: 'file',
       fileName: 'filename.jpg',
       params:{operatiune:'uploadpoza'}
   }
   ft.upload(this.imageURL,encodeURI("https://www.myserver.com/test.php"),options)
       .then((data) => {
            // success
            alert("image send:"+this.imageURL);
        }, (err) => {
          // error
          alert("err: "+JSON.stringify(err));
        })
    }
}

我用两种方式检查了错误:

案例1:

我上传的代码中有2个提醒: 一个。成功时的消息:alert(“image send:”+ this.imageURL); 湾错误消息:alert(“err:”+ JSON.stringify(err));

在我的情况下,我注意到只显示第一条消息,其中一条消息 代码执行正确。

案例2:

我已将手机通过电缆连接到笔记本电脑。 要启动应用程序,我输入“Node.js-Command-Prompt”命令“离子运行” Android的”。 我已打开Chrome浏览器并输入地址栏 “铬://检查/#设备”。然后为我的应用选择“INSPECT-option” 弹出控制台。控制台没有显示任何错误。 这是测试它的正确方法,还是我应该尝试不同的东西?

我打印了“ft.upload”成功收到的对象“数据” 功能。结果是:

data.response=
data.responseCode=200
data.bytesSent=411240

对我而言,这意味着将信息发送到服务器。

还有一件事: - 我运行了不同类型的测试:向两台服务器发送信息 使用HTTPS和HTTP - 我尝试添加trustAllHosts = true并在另一个测试中 trustAllHosts =假

每次同样的问题:在iOS上运行但在android上失败

2 个答案:

答案 0 :(得分:15)

尝试在配置中设置chunkedMode false。

   var options = {
   chunkedMode: false,
   fileKey: 'file',
   fileName: 'filename.jpg',
   params:{operatiune:'uploadpoza'}

答案 1 :(得分:0)

试试这个:

var onUploadSuccess = function (r) {
     clearCache();
     alert(JSON.stringify(r));      
}

var onUploadFailed = function (error) {
     alert(JSON.stringify(r));
}

var options = new FileUploadOptions();
options.fileKey = "file";
options.fileName = imageURI.substr(imageURI.lastIndexOf('/') + 1);
options.mimeType = "image/jpeg";

var params = new Object();
params.action = "some value";//=== if u want to send some other parameters

options.params = params;
options.chunkedMode = false;

var ft = new FileTransfer();

ft.upload(imageURI, SITE_URL+"upload.php", onUploadSuccess, onUploadFailed, options);