【问题标题】:cordova android image upload failed科尔多瓦android图像上传失败
【发布时间】:2015-03-24 04:48:02
【问题描述】:

在让科尔多瓦文件传输正常工作时遇到一些问题。

我正在阅读日志,似乎文件正在传输,但服务器正在剥离扩展名并写入 0 大小。使用 blueimp 文件上传服务器处理程序。上传处理程序适用于我的 jquery 脚本。我之前已经让它工作了。不确定发生了什么变化,突然之间它没有正确写入文件。

这是来自 logcat 的日志

D/FileTransfer(22082): Sent 100387 of 100387
D/FileTransfer(22082): response code: 200
D/FileTransfer(22082): response headers: {null=[HTTP/1.1 200 OK], Access-Control
-Allow-Origin=[*], Cache-Control=[no-store, no-cache, must-revalidate], Connecti
on=[close], Content-Disposition=[inline; filename="files.json"], Content-Type=[t
ext/plain], Date=[Fri, 31 Jan 2014 08:28:24 GMT], Pragma=[no-cache], Server=[Apa
che/2.4.7 (Unix) OpenSSL/1.0.1e-fips mod_bwlimited/1.4], Transfer-Encoding=[chun
ked], Vary=[Accept], X-Android-Received-Millis=[1391156904056], X-Android-Respon
se-Source=[NETWORK 200], X-Android-Sent-Millis=[1391156902868], X-Content-Type-O
ptions=[nosniff], X-Powered-By=[PHP/5.4.23]}
D/FileTransfer(22082): got response from server
D/FileTransfer(22082): {"files":[{"name":"52eb5ea9309fe","size":0,"type":"multip
art\/form-data;boundary=+++++","error":"abort","deleteUrl":"http:\/\/drayagedev.
fr8taxi.com\/images\/uploader\/?file=52eb5ea9309fe","deleteType":"DELETE"}]}
D/CordovaLog(22082): file:///android_asset/www/js/dashboard_driver.js: Line 305
: Code = 200
I/chromium(22082): [INFO:CONSOLE(305)] "Code = 200", source: file:///android_ass
et/www/js/dashboard_driver.js (305)
D/CordovaLog(22082): file:///android_asset/www/js/dashboard_driver.js: Line 306
: Response = {"files":[{"name":"52eb5ea9309fe","size":0,"type":"multipart\/form-
data;boundary=+++++","error":"abort","deleteUrl":"http:\/\/drayagedev.fr8taxi.co
m\/images\/uploader\/?file=52eb5ea9309fe","deleteType":"DELETE"}]}
I/chromium(22082): [INFO:CONSOLE(306)] "Response = {"files":[{"name":"52eb5ea930
9fe","size":0,"type":"multipart\/form-data;boundary=+++++","error":"abort","dele
teUrl":"http:\/\/**.com\/images\/uploader\/?file=52eb5ea9309fe",
"deleteType":"DELETE"}]}", source: file:///android_asset/www/js/dashboard_driver
.js (306)
D/CordovaLog(22082): file:///android_asset/www/js/dashboard_driver.js: Line 307
: Sent = 98416
I/chromium(22082): [INFO:CONSOLE(307)] "Sent = 98416", source: file:///android_a
sset/www/js/dashboard_driver.js (307)

这里是函数

function uploadPhoto(imageURI) {
    var options = new FileUploadOptions();
    options.fileKey="file";
    options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
    options.mimeType="image/jpeg";
    options.headers = {
        Connection: "close"
    }
    options.chunkedMode = false;

    var params = {};
    params.fullpath = imageURI;
    params.name = options.fileName;

    //options.params = params; Uncommenting has no effect

    var ft = new FileTransfer();
    ft.upload(imageURI, encodeURI("http://**/images/uploader"), checkUploadStatus, checkUploadStatus, options);
}

【问题讨论】:

    标签: android jquery cordova file-transfer


    【解决方案1】:

    回到 blueimp 的文件上传处理程序。事实证明它确实有效。

    Cordova Android File Transfer 使用“file”作为键,而 Upload Hander 会查找“files”。因此,将文件更改为文件使 PHP 服务器端处理程序起作用。现在我可以在 webapp 和 cordova 上使用相同的处理程序了。

    仅供参考,请确保在上传后使用 JSON PARSE 读取响应。

    完整代码如下。

    科尔多瓦 相机按钮

    $('body').on('click', '.btn_upload', function (){
    
        navigator.camera.getPicture(uploadPhoto, onFail, { quality: 75,
            destinationType: Camera.DestinationType.FILE_URI
        });
    
    })
    
    function onFail() {
    
     }
    
    
    function uploadPhoto(imageURI) {
    
    startSpin();
    
    var options = new FileUploadOptions();
    options.fileKey="files";
    options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
    options.mimeType="image/jpeg";
    options.headers = {
        Connection: "close"
    }
    options.chunkedMode = false;
    
    var params = {};
    params.fullpath = imageURI;
    params.name = options.fileName;
    
    //options.params = params;
    
    var ft = new FileTransfer();
    ft.upload(imageURI, encodeURI("http://**/images/uploader/index.php"), win, onFail, options);
    
    }
    
    
     function win(result) {
    
    if(result.responseCode == "200"){
    
        var result = jQuery.parseJSON(result.response);
    
        var filename = result.files[0]['name'];
        var filethumbnailUrl = result.files[0]['thumbnailUrl'];
        var filelargeUrl = result.files[0]['largeUrl'];
        var filemediumUrl = result.files[0]['mediumUrl'];
        var fileurl = result.files[0]['url'];
    
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      放弃使用 jquery fileupload 作为上传处理程序。创建了一个简单的 PHP 上传处理程序,它可以工作。只是缺少花哨的调整大小等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-06
        • 2019-02-04
        • 1970-01-01
        • 2022-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多