From: Pawel Andruszkiewicz Date: Fri, 20 Nov 2015 13:23:35 +0000 (+0100) Subject: [FileTransfer] Fixes for upload. X-Git-Tag: submit/tizen/20151221.111205^2~26 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=85a75eaf3183288e1292d7ce4f8a69797797791c;p=platform%2Fcore%2Fapi%2Fcordova-plugins.git [FileTransfer] Fixes for upload. [Verification] Pass rate: 0 failures, 2 pending (backward compatibility). Change-Id: Ia22b2a5281a37d3ba2f75e9e75722c379ebf0304 Signed-off-by: Pawel Andruszkiewicz --- diff --git a/src/filetransfer/cordova_filetransfer_api.js b/src/filetransfer/cordova_filetransfer_api.js index f903948..b8912ee 100755 --- a/src/filetransfer/cordova_filetransfer_api.js +++ b/src/filetransfer/cordova_filetransfer_api.js @@ -56,13 +56,15 @@ function checkURL(url) { var uploads = {}; var downloads = {}; +var filePrefix = 'file://'; + exports = { upload: function(successCallback, errorCallback, args) { var filePath = args[0], server = args[1], - fileKey = args[2], - fileName = args[3], - mimeType = args[4], + fileKey = args[2] || 'file', + fileName = args[3] || 'image.jpg', + mimeType = args[4] || 'image/jpeg', params = args[5], trustAllHosts = args[6], // not used chunkedMode = args[7], @@ -70,12 +72,21 @@ exports = { id = args[9], httpMethod = args[10]; + if (0 !== filePath.indexOf(filePrefix)) { + filePath = filePrefix + filePath; + } + var fail = function(code, status, response) { uploads[id] && delete uploads[id]; var error = new FileTransferError(code, filePath, server, status, response); errorCallback && errorCallback(error); }; + if (!checkURL(server)) { + fail(FileTransferError.INVALID_URL_ERR); + return; + } + function successCB(entry) { if (entry.isFile) { entry.file(function(file) { @@ -132,23 +143,17 @@ exports = { }; xhr.send(fd); + + // Special case when transfer already aborted, but XHR isn't sent. + // In this case XHR won't fire an abort event, so we need to check if transfers record + // isn't deleted by filetransfer.abort and if so, call XHR's abort method again + if (!uploads[id]) { + xhr.abort(); + } } - var bytesPerChunk; + uploadFile(file); - if (options.chunkedMode === true) { - bytesPerChunk = 1024 * 1024; // 1MB chunk sizes. - } else { - bytesPerChunk = file.size; - } - var start = 0; - var end = bytesPerChunk; - while (start < file.size) { - var chunk = file.webkitSlice(start, end, mimeType); - uploadFile(chunk); - start = end; - end = start + bytesPerChunk; - } }, function(error) { fail(FileTransferError.CONNECTION_ERR); }); @@ -156,10 +161,10 @@ exports = { } function errorCB() { - fail(FileTransferError.CONNECTION_ERR); + fail(FileTransferError.FILE_NOT_FOUND_ERR); } - window.webkitResolveLocalFileSystemURL(filePath, successCB, errorCB); + resolveLocalFileSystemURL(filePath, successCB, errorCB); }, download: function(successCallback, errorCallback, args) { var url = args[0],