Transfert de fichiers
L'objet FileTransfer permet de charger ou télécharger des fichiers vers et depuis un serveur.
Propriétés
- onprogress : fonction appelée avec un
ProgressEventà chaque fois qu'un nouveau segment de données est transféré. (Function)
Méthodes
upload : envoie un fichier à un serveur.
download : télécharge un fichier depuis un serveur.
abort : annule le transfert en cours.
Détails
L'objet FileTransfer offre un moyen d'envoyer des fichiers vers un serveur distant à l'aide d'une requête HTTP de type POST multi-part. Les protocoles HTTP et HTTPS sont tous deux supportés. Des paramètres optionnels peuvent être spécifiés en passant un objet [FileUploadOptions](../fileuploadoptions/fileuploadoptions.html) à la méthode upload(). Dans le cas d'un téléchargement réussi, un objet [FileUploadResult](../fileuploadresult/fileuploadresult.html) est passé à la callback de succès. Si une erreur survient, un objet [FileTransferError](../filetransfererror/filetransfererror.html) objet est passé à la callback d'erreur. Il est également possible (uniquement sur iOS et Android) de télécharger un fichier depuis un serveur distant et l'enregistrer sur l'appareil.
Plates-formes supportées
- Android
- BlackBerry WebWorks (OS 5.0 et plus)
- iOS
- Windows Phone 7 et 8
- Windows 8
upload
Paramètres :
filePath : chemin d'accès complet au fichier sur l'appareil.
server : l'URL du serveur destiné à recevoir le fichier, encodée via
encodeURI().successCallback : callback de succès à laquelle est passé un objet
[Metadata](../metadata/metadata.html). (Function)errorCallback : callback d'erreur s'exécutant si une erreur survient lors de la récupération de l'objet
[Metadata](../metadata/metadata.html). Appelée avec un objet[FileTransferError](../filetransfererror/filetransfererror.html). (Function)options : paramètres facultatifs tels que le nom du fichier et son type mime.
trustAllHosts : paramètre facultatif, sa valeur par défaut est
false. Si sa valeur est réglée àtrue, tous les certificats de sécurité sont acceptés. Ceci peut être utile car Android rejette les certificats auto-signés. N'est pas recommandé pour une utilisation en production. Supporté sous Android et iOS. (boolean)
Exemple court
// !! Assumes variable fileURI contains a valid URI to a text file on the device
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 = fileURI.substr(fileURI.lastIndexOf('/') + 1);
options.mimeType = "text/plain";
var params = {};
params.value1 = "test";
params.value2 = "param";
options.params = params;
var ft = new FileTransfer();
ft.upload(fileURI, encodeURI("http://some.server.com/upload.php"), win, fail, options);
Exemple complet
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>File Transfer Example</title>
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">
// Wait for device API libraries to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// device APIs are available
//
function onDeviceReady() {
// Retrieve image file location from specified source
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) {
var options = new FileUploadOptions();
options.fileKey="file";
options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
options.mimeType="image/jpeg";
var params = {};
params.value1 = "test";
params.value2 = "param";
options.params = params;
var ft = new FileTransfer();
ft.upload(imageURI, 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);
}
</script>
</head>
<body>
<h1>Example</h1>
<p>Upload File</p>
</body>
</html>
Réglage des en-têtes de téléchargement
Supporté par Android et iOS
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=fileURI.substr(fileURI.lastIndexOf('/')+1);
options.mimeType="text/plain";
var headers={'headerParam':'headerValue'};
options.headers = headers;
var ft = new FileTransfer();
ft.upload(fileURI, uri, win, fail, options);
Particularités d'Android
Régler la valeur de l'option chunkedMode à false afin d'éviter les problèmes de téléchargement vers un serveur Nginx.
download
Paramètres :
source : l'URL du serveur depuis lequel télécharger le fichier, encodée via
encodeURI().target : chemin d'accès complet au fichier sur l'appareil.
successCallback : une callback de succès à laquelle est passée un objet
[FileEntry](../fileentry/fileentry.html). (Function)errorCallback : une callback d'erreur s'exécutant si une erreur se produit lors de la récupération de l'objet
[Metadata](../metadata/metadata.html). Appelée avec un objet[FileTransferError](../filetransfererror/filetransfererror.html). (Function)trustAllHosts : paramètre facultatif, sa valeur par défaut est
false. Si sa valeur est réglée àtrue, tous les certificats de sécurité sont acceptés. Ceci peut être utile car Android rejette les certificats auto-signés. N'est pas recommandé pour une utilisation en production. Supporté sous Android et iOS. (boolean)options : paramètres facultatifs, seules les en-têtes sont actuellement supportées (par exemple l'autorisation (authentification basique), etc.).
Exemple court
// !! Suppose que filePath est un chemin valide sur l'appareil
var fileTransfer = new FileTransfer();
var uri = encodeURI("http://some.server.com/download.php");
fileTransfer.download(
uri,
filePath,
function(entry) {
console.log("Téléchargement terminé : " + entry.fullPath);
},
function(error) {
console.log("Source pour l'erreur de téléchargement : " + error.source);
console.log("Destination pour l'erreur de téléchargement : " + error.target);
console.log("Code de l'erreur de téléchargement : " + error.code);
},
false,
{
headers: {
"Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
}
}
);
abort
Abandonne un transfert en cours. Un objet FileTransferError avec un code d'erreur FileTransferError.ABORT_ERR est passé à la callback d'erreur onerror.
Plates-formes supportées
- Android
- iOS
Exemple court
// !! Suppose que la variable fileURI contient l'URI valide d'un fichier texte sur l'appareil
var win = function(r) {
console.log("Ne devrait pas être appelée.");
}
var fail = function(error) {
// error.code == FileTransferError.ABORT_ERR
alert("Une erreur est survenue : code = " + error.code);
console.log("Source pour l'erreur de téléchargement : " + error.source);
console.log("Destination pour l'erreur de téléchargement : " + error.target);
}
var options = new FileUploadOptions();
options.fileKey="file";
options.fileName="myphoto.jpg";
options.mimeType="image/jpeg";
var ft = new FileTransfer();
ft.upload(fileURI, encodeURI("http://some.server.com/upload.php"), win, fail, options);
ft.abort();
onprogress
Fonction appelée avec un objet ProgressEvent à chaque fois qu'un nouveau segment de données est transféré.
Plates-formes supportées
- Android
- iOS
Exemple
fileTransfer.onprogress = function(progressEvent) {
if (progressEvent.lengthComputable) {
loadingStatus.setPercentage(progressEvent.loaded / progressEvent.total);
} else {
loadingStatus.increment();
}
};
fileTransfer.download(...); // or fileTransfer.upload(...);
Particularités - sous Android et iOS, la valeur de la propriété lengthComputable est false pour les téléchargements qui utilisent l'encodage gzip.