使用Phonegap(cordova)进行图像捕获/上传,iPhone无法正常工作

时间:2013-02-27 17:15:41

标签: iphone cordova upload camera

我一直试图通过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();

点击两个按钮调用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数组存储到数据库中,以确保它们通过并创建映像。

但同样,没有任何东西进入服务器。任何帮助将不胜感激。我在这里和整个网络上已经尝试了很多这个代码的版本。

2 个答案:

答案 0 :(得分: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!

答案 1 :(得分:0)

试试这是我的代码。它对我有用。

  1. 通过encodeURI方法对您的网址进行编码
  2. fileKey,带有“file”,如服务器端脚本$ _FILES ['file']

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