12

JQMとPhoneGapを使用してAndroid用のモバイルアプリを構築しています。ファイル(画像)をリモートサーバーにアップロードする必要があります(ギャラリーから、またはカメラで写真を撮る)。基本的にはphonegapファイルAPIを使用して実行できますが、問題はサーバーが単純なPOST送信をサポートするように作成されていることです。

私が必要としているのは、次のhtmlフォームから送信されるのとまったく同じように、アプリリクエストで「シミュレート」することです。さらに、サーバーの応答を取得する必要があります。

<form name="myWebForm" ENCTYPE="multipart/form-data" action="http://www.myurl.com/api/uploadImage "method="post">
    <input type="file" name="image" />
    <input type="submit" value="Submit"/>       
</form>

phonegap file APIを使おうとしましたが、サーバー側で取得したデータの構造が本来とは異なります。

そのフォームをアプリに実装しようとしましたが、[ファイルを選択]ボタンが無効になりました...

サーバー側で変更を加えることなく、どのように実現できますか?

4

2 に答える 2

12

Phonegap で入力ファイルを使用することはできません。サポートされていません。次のようなものを作成する必要があります。

    function onDeviceReady() {

        // Retrieve image file location from specified source
        navigator.camera.getPicture(uploadPhoto,
                                    function(message) { alert('get picture failed'); },
                                    { quality: 50, 
                                    destinationType: navigator.camera.DestinationType.FILE_URI,
                                    sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY }
                                    );

    }

    function uploadPhoto(imageURI) {
        var options = new FileUploadOptions();
        options.fileKey="file";
        options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1)+'.png';
        options.mimeType="text/plain";

        var params = new Object();

        options.params = params;

        var ft = new FileTransfer();
        ft.upload(imageURI, encodeURI("http://some.server.com/upload.php"), win, fail, options);
    }

    function win(r) {
        console.log("Code = " + r.responseCode);
        console.log("Response = " + r.response);
        console.log("Sent = " + r.bytesSent);
    }

    function fail(error) {
        alert("An error has occurred: Code = " + error.code);
        console.log("upload error source " + error.source);
        console.log("upload error target " + error.target);
    }

getPicture メソッドでは、ファイル ソースを選択します。詳細情報を参照してください: http://docs.phonegap.com/en/2.1.0/cordova_file_file.md.html#FileTransfer

編集:

テキスト形式で画像を送信するには、「text/plain」形式で mimeType を要求するだけでなく、fileName 拡張子を指定する必要がありました。パラメータについては、必要ないのになぜ使用するのでしょうか?

于 2012-12-13T14:40:57.623 に答える