FileStream readBytes et offset
J'avais besoin de lire les derniers octets d'un fichier en Air. Je me suis donc servi de la fonction readBytes de la classe FileStream. En regardant la signature de la fonction readBytes readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void je me suis arrêté sur le paramètre offset.
La doc disait donc : "offset : The offset into the bytes parameter at which data read should begin."
J'ai donc appelé la fonction readBytes avec un offset pour pointer vers un point précis du fichier.
Cependant, mon ByteArray était de la taille du fichier! En faisant quelques tests je me suis rendu compte que la taille de mon ByteArray était la somme du paramètre offset et length
Je me suis donc rendu compte que ce paramètre offset de la readBytes n'était pas l'offset dans le fichier mais l'index à laquel le ByteArray commence à écrire!
La bonne méthode pour lire un des octets précis d'un FileStream et de placer l'attribut position du FileStream et de faire un readBytes (mais avec un offset de 0 ;^) )
Air Amazon’s S3 et metadata
Amazon S3 est une solution d'hébergements offert par Amazon que j'utilise pour un logiciel devant sauvegarder des medias en ligne.
Pour ce faire, j'utilise donc la bibliothèque as3awss3lib de google permettant d'uploader et de downloader mes fichiers très simplement sur mon espace S3.
Très rapidement, j'ai donc eu besoin de comparer les fichiers locaux et les fichiers en ligne afin de vérifier leurs intégrités. Je ne pouvais pas simplement comparer leurs dates de modifications car les fichiers présents sur le serveur ont comme date de modification la date d'upload bien sûr.
La solution a donc été d'enregistrer cette information dans les metadatas du fichier sur S3.
Drag&Drop de fichier dans Air
Voici comment faire simplement un drag&drop de fichier dans une application air :
Tout d''abord il faut ajouter les écouteur dragEnter et dragDrop
component.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onDragDrop);
Ensuite les fonctions onDragEnter et onDragDrop
{
//On vérifie qu''il y a bien des fichiers
if(e.clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT))
{
//On récupère le tableau de fichier
var files:Array = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
//On regarde si tous les fichiers on bien la bonne extension (ici jpg)
var dragable:Boolean = true;
for each(var file:File in files)
{
if(file.extension != "jpg")
dragable = false;
}
//On accepte le drop
if(dragable)
DragManager.acceptDragDrop(mediatheque);
}
}
private function onDragDrop(e:NativeDragEvent):void
{
//On récupère le tableau de fichier
var arr:Array = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
var f:File;
//On crée un FileStream pour travailler sur les fichiers
var fs:FileStream;
//Pour chaque fichiers dans le tableau
for each(f in arr)
{
//On ouvre le fichier
fs.open(f, FileMode.READ);
/* Opérations sur le fichier */
fs.close();
}
}
Et voilà =)