This plugin allows you to upload and download files.
This plugin defines global FileTransfer
, FileUploadOptions
constructors. Although in the global scope, they are not available until after the deviceready
event.
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
console.log(FileTransfer);
}
Report issues with this plugin on the Apache Cordova issue tracker
cordova plugin add cordova-plugin-file-transfer
* Do not support onprogress
nor abort()
** Do not support onprogress
The FileTransfer
object provides a way to upload files using an HTTP
multi-part POST or PUT request, and to download files.
ProgressEvent
whenever a new chunk of data is transferred. (Function)upload: Sends a file to a server.
download: Downloads a file from server.
abort: Aborts an in-progress transfer.
Parameters:
fileURL: Filesystem URL representing the file on the device or a data URI. For backwards compatibility, this can also be the full path of the file on the device. (See Backwards Compatibility Notes below)
server: URL of the server to receive the file, as encoded by encodeURI()
.
successCallback: A callback that is passed a FileUploadResult
object. (Function)
errorCallback: A callback that executes if an error occurs retrieving the FileUploadResult
. Invoked with a FileTransferError
object. (Function)
options: Optional parameters (Object). Valid keys:
file
. (DOMString)image.jpg
. (DOMString)PUT
or POST
. Defaults to POST
. (DOMString)image/jpeg
. (DOMString)true
. (Boolean)trustAllHosts: Optional parameter, defaults to false
. If set to true
, it accepts all security certificates. This is useful since Android rejects self-signed security certificates. Not recommended for production use. Supported on Android and iOS. (boolean)
// !! Assumes variable fileURL contains a valid URL to a text file on the device,
// for example, cdvfile://localhost/persistent/path/to/file.txt
var win = function (r) {
console.log("Code = " + r.responseCode);
console.log("Response = " + r.response);
console.log("Sent = " + r.bytesSent);
}
var fail = function (error) {
alert("An error has occurred: Code = " + error.code);
console.log("upload error source " + error.source);
console.log("upload error target " + error.target);
}
var options = new FileUploadOptions();
options.fileKey = "file";
options.fileName = fileURL.substr(fileURL.lastIndexOf('/') + 1);
options.mimeType = "text/plain";
var params = {};
params.value1 = "test";
params.value2 = "param";
options.params = params;
var ft = new FileTransfer();
ft.upload(fileURL, encodeURI("http://some.server.com/upload.php"), 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);
}
var uri = encodeURI("http://some.server.com/upload.php");
var options = new FileUploadOptions();
options.fileKey="file";
options.fileName=fileURL.substr(fileURL.lastIndexOf('/')+1);
options.mimeType="text/plain";
var headers={'headerParam':'headerValue'};
options.headers = headers;
var ft = new FileTransfer();
ft.onprogress = function(progressEvent) {
if (progressEvent.lengthComputable) {
loadingStatus.setPercentage(progressEvent.loaded / progressEvent.total);
} else {
loadingStatus.increment();
}
};
ft.upload(fileURL, uri, win, fail, options);
A FileUploadResult
object is passed to the success callback of the
FileTransfer
object's upload()
method.
bytesSent: The number of bytes sent to the server as part of the upload. (long)
responseCode: The HTTP response code returned by the server. (long)
response: The HTTP response returned by the server. (DOMString)
headers: The HTTP response headers by the server. (Object)
responseCode
or bytesSent
.Parameters:
source: URL of the server to download the file, as encoded by encodeURI()
.
target: Filesystem url representing the file on the device. For backwards compatibility, this can also be the full path of the file on the device. (See Backwards Compatibility Notes below)
successCallback: A callback that is passed a FileEntry
object. (Function)
errorCallback: A callback that executes if an error occurs when retrieving the FileEntry
. Invoked with a FileTransferError
object. (Function)
trustAllHosts: Optional parameter, defaults to false
. If set to true
, it accepts all security certificates. This is useful because Android rejects self-signed security certificates. Not recommended for production use. Supported on Android and iOS. (boolean)
options: Optional parameters, currently only supports headers (such as Authorization (Basic Authentication), etc).
// !! Assumes variable fileURL contains a valid URL to a path on the device,
// for example, cdvfile://localhost/persistent/path/to/downloads/
var fileTransfer = new FileTransfer();
var uri = encodeURI("http://some.server.com/download.php");
fileTransfer.download(
uri,
fileURL,
function(entry) {
console.log("download complete: " + entry.toURL());
},
function(error) {
console.log("download error source " + error.source);
console.log("download error target " + error.target);
console.log("upload error code" + error.code);
},
false,
{
headers: {
"Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
}
}
);
if-Modified-Since
header to download method.Aborts an in-progress transfer. The onerror callback is passed a FileTransferError object which has an error code of FileTransferError.ABORT_ERR
.
// !! Assumes variable fileURL contains a valid URL to a text file on the device,
// for example, cdvfile://localhost/persistent/path/to/file.txt
var win = function(r) {
console.log("Should not be called.");
}
var fail = function(error) {
// error.code == FileTransferError.ABORT_ERR
alert("An error has occurred: Code = " + error.code);
console.log("upload error source " + error.source);
console.log("upload error target " + error.target);
}
var options = new FileUploadOptions();
options.fileKey="file";
options.fileName="myphoto.jpg";
options.mimeType="image/jpeg";
var ft = new FileTransfer();
ft.upload(fileURL, encodeURI("http://some.server.com/upload.php"), win, fail, options);
ft.abort();
A FileTransferError
object is passed to an error callback when an error occurs.
code: One of the predefined error codes listed below. (Number)
source: URL to the source. (String)
target: URL to the target. (String)
http_status: HTTP status code. This attribute is only available when a response code is received from the HTTP connection. (Number)
body Response body. This attribute is only available when a response is received from the HTTP connection. (String)
exception: Either e.getMessage or e.toString (String)
FileTransferError.FILE_NOT_FOUND_ERR
FileTransferError.INVALID_URL_ERR
FileTransferError.CONNECTION_ERR
FileTransferError.ABORT_ERR
FileTransferError.NOT_MODIFIED_ERR
Previous versions of this plugin would only accept device-absolute-file-paths as the source for uploads, or as the target for downloads. These paths would typically be of the form:
/var/mobile/Applications/<application UUID>/Documents/path/to/file (iOS)
/storage/emulated/0/path/to/file (Android)
For backwards compatibility, these paths are still accepted, and if your application has recorded paths like these in persistent storage, then they can continue to be used.
These paths were previously exposed in the fullPath
property of FileEntry
and DirectoryEntry
objects returned by the File plugin. New versions of the File plugin however, no longer expose these paths to JavaScript.
If you are upgrading to a new (1.0.0 or newer) version of File, and you have previously been using entry.fullPath
as arguments to download()
or upload()
, then you will need to change your code to use filesystem URLs instead.
FileEntry.toURL()
and DirectoryEntry.toURL()
return a filesystem URL of the form:
cdvfile://localhost/persistent/path/to/file
which can be used in place of the absolute file path in both download()
and upload()
methods.