Phonegap / Cordova上传图片文件

时间:2014-09-22 07:56:39

标签: image file cordova file-upload

在外部网站上有一个输入(类型 - 文件)字段,我需要将图像上传到此输入。 在android中我用WebChromeClient和openFileChooser(ValueCallback uploadMsg,String acceptType,String capture)函数完成了这个任务。 我不知道如何在phonegap / cordova中解决这个任务。

我的代码是:

function initialize() {
    document.addEventListener('deviceready', onDeviceReady, false);
    var ref = null;
}
function onDeviceReady() {

    ref = window.open('http://example.com',
            '_blank', 'location=no', 'EnableViewPortScale=yes');
    ref.addEventListener('loadstop', LoadStop);

}

function LoadStop(event) {
    if (event.url == 'http://example.com/Add') {
        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) {
    console.log("imageURI----: " + imageURI);

    var options = new FileUploadOptions();
    options.fileKey = "file";
    options.fileName = "IMAG0475";
    options.mimeType = "image/*";

    var params = new Object();
    options.params = params;

    var ft = new FileTransfer();
    ft.upload(imageURI,
            encodeURI("http://example/Add"), 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);
}

1 个答案:

答案 0 :(得分:0)

默认情况下,cordova应用程序无法访问Android手机中的所有存储位置,例如sdcard,external-files。

要解决此问题,请将以下行复制到cordova项目的config.xml中,

<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,root"/>

Config.xml可以在/platforms/android/res/xml/config.xml

找到

只需添加以上行并再次构建项目。