2017-01-26 9 views
0

何が問題なのでしょうか?ここ数週間、私のコードはiOS上でのみ動作し、Android搭載デバイスでは動作しないのが分かります。私はオプションが不足しているので、任意のアイデアは高く評価されるだろう。Androidで動作しないcordova-plugin-file-transferを使用したファイルアップロード

ファイルを送信するために表示される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:

ケース1:

@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)); 
     }) 
    } 
} 

私は二つの方法でエラーをチェックしました:

私には2私のアップロードしたコードのerts: a。成功の場合のメッセージ:alert( "image send:" + this.imageURL); b。エラーメッセージ:alert( "err:" + JSON.stringify(err));

私の場合、最初のメッセージだけが表示されていて、コードが正しく実行されていることに気付いた。

ケース2:

私の電話機をケーブルでラップトップに接続しました。 アプリを起動するには、「Node.js-Command-Prompt」コマンド「ionic run Android」を入力してください。 Chromeブラウザを開き、アドレスバーに "chrome:// inspect /#devices"と入力しました。次に、私のアプリの "INSPECT-option"を選択し、 コンソールをポップアップします。コンソールにエラーは表示されませんでした。 これは正しい方法ですか、別のものを試すべきですか?

「ft.upload」 機能で成功した場合に受け取ったオブジェクト「データ」を印刷しました。結果は次のとおりです。

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

これは、情報がサーバーに送信されることを意味します。

もう一つ: - 私はテストの種類を実行しました:HTTPSとHTTP で両方のサーバー に情報を送信する - 私は真と別のテスト trustAllHostsに= trustAllHostsを追加しようとしました=偽

そして、同じ問題が発生するたびにiOSでは動作しますが、アンドロイドでは失敗します

答えて

12

設定でchunkedModeをfalseに設定してみてください。

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

パーフェクト、それが働いています。どうもありがとうございます。この設定は私の問題を解決し、長い一連の検索とテストを終了しました。 – Eventful

+0

そこに行ったこと.. – raj

+0

あなたは私のヒーローです! – Maxime2400

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); 
関連する問題