2

画像を取得してサーバーにアップロードするために、PhoneGap (Cordova) を介してアプリをセットアップしようとしています。ここで非常に多くの応答を確認し、それらのコードを試しました。カメラを上げて写真を撮ったり、電話ギャラリーにアクセスしたりできます。しかし、画像をサーバーに送信することはできません。画像を送信しようとしましたが、base64 画像ストリームを送信することさえしました。サーバーに取り込めません。

クライアント側の JavaScript は次のとおりです。

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {

}

function ImageUpload() {
    this.useExistingPhoto = function(e) {
        this.capture(Camera.PictureSourceType.SAVEDPHOTOALBUM);
    }

    this.takePhoto = function(e) {
        this.capture(Camera.PictureSourceType.CAMERA);
    }

    this.capture = function(sourceType) {
        navigator.camera.getPicture(this.onCaptureSuccess, this.onCaptureFaile, {
            destinationType: Camera.DestinationType.FILE_URI,
            soureType: sourceType,
            correctOrientation: true
        });
    }

    this.onCaptureSuccess = function(imageURI) {
        var fail, ft, options, params, win;

        success = function(response) {
            alert("Your photo has been uploaded!");
        };

        fail = function(error) {
            alert("An error has occurred: Code = " + error.code + "\nMessage = "+error.message);
        };

        options = new FailUploadOptions();
        options.fileKey = "file";
        options.fileName = imageURI.substr(imageURI.lastIndexOf('/') + 1);
        options.mimeType = "text/plain";
        params = {
            val1: "some value",
            val2: "some other value"
        };
        options.params = params;
        ft= new FileTransfer();
        ft.upload(imageURI, 'http://style.appdev01.com/app/client-profile.php', success, faile, options);
    }

    this.OnCaptureFail = function(message) {
        alert("Failed because: "+message);
    }
};
var imageuploader = new ImageUpload();

2 つのボタンは、クリック時に imageuploader.takePhoto と .useExistingPhoto を呼び出します。

サーバー側には、次の php があります: if(isset($_FILES['file'])) {

$target_path = "/home/style/public_html/images/client_images/app_image.jpg";

move_uploaded_file($_FILES['file']['tmp_name'], $target_path);

$insert = "INSERT INTO
    `fut`
SET
    `request` = '".serialize($_POST)."',
    `file` = '".serialize($_FILES)."'";
$mysql->query($insert);

}

これは、POST および FILE 配列を db に格納して、それらが通過してイメージを作成することを確認するためのものです。

しかし、やはり、サーバーには何も届きません。どんな助けでも大歓迎です。ここやウェブ全体の非常に多くの質問から、このコードの非常に多くのバージョンを試しました。

4

2 に答える 2

0

これが私のコードです。それは私のために働いています。

  1. encodeURI メソッドで URL をエンコードします
  2. サーバー側スクリプト $_FILES['file'] のように「file」を含む fileKey

    uploadFile: function(refNo){
    var uri = fileUpload.fileUri;
    var file = uri.substr(uri.lastIndexOf('/') + 1);
    
    var options = new FileUploadOptions();
    options.fileKey = "file"; 
    options.fileName = file;
    options.mimeType="image/jpeg";
    alert("name === "+uri);
    options.chunkedMode = false;
    
    
    var ft = new FileTransfer();
    Common.ajaxLoading('show');
    
    
    ft.upload(uri,encodeURI("http://172.16.1.147:80/upload/home.php") , fileUpload.uploadSuccess, fileUpload.uploadFail, options, true);
    },
    
于 2015-11-24T17:08:39.670 に答える
0
define ('SITE_ROOT', realpath(dirname(__FILE__))); /* echo SITE_ROOT; to dir
move_uploaded_file($_FILES["file"]["tmp_name"],SITE_ROOT."/uploads/".$_FILES["file"]["name"]); // will move file, make sure uplaods has write permission!

これは、タブレットではなく Android シミュレーターで機能しますが、同じことで忙しい場合はお知らせください。

$myarray = array( $_REQUEST);
foreach ($myarray as $key => $value) {

    echo "<p>".$key."</p>";
    echo "<p>".$value."</p>";
    echo "<hr />";
}

POST / GETのチェックに使用できること!

于 2013-03-16T03:29:36.443 に答える