2014-01-31 55 views
0

在使cordova文件传输工作时遇到一些问题。cordova android图片上传失败

我正在阅读日志,看起来文件正在传输,但服务器正在剥离扩展名并写入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); 
} 

回答

0

放弃了使用jQuery文件上传的上传处理程序。创建一个简单的PHP上传处理程序,它的作品。只是缺乏调整大小等

1

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

Cordova Android File Transfer使用'文件'作为关键字,而Upload Hander则查找'文件'。因此,将文件更改为PHP Serverside处理程序可以工作。现在我可以在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']; 


    } 
}