Hi Hugo, sorry for the delay.
Here you can see how we work with mx.net.FileReference. (I have adapted the
code to be able to show it to you in a few lines, there may be omission or
transcription errors)
import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
import mx.net.FileReference;
import mx.net.FileFilter;
import mx.events.IOErrorEvent;
import mx.events.SecurityErrorEvent;
import mx.utils.ByteArray;
public var allowedExtensions:String = '*.jpg;*.jpeg;*.gif;*.png;*.bmp';
public var maxFileSize:Number = 2;
public var fileType:String;
public var fileName:String;
private var fileData:ByteArray;
public function loadFromFileSystem():void
{
fileData = null;
fileType = "";
fileName = "";
var file:FileReference = new FileReference();
file.addEventListener("cancel", cancelHandler);
file.addEventListener(Event.SELECT, selectHandler);
file.browse([new FileFilter('Image',allowedExtensions)]);
}
private function cancelHandler(event:Event):void
{
var dispatcher:IEventDispatcher =
IEventDispatcher(event.target);
dispatcher.removeEventListener("cancel", cancelHandler);
dispatcher.removeEventListener(Event.SELECT, selectHandler);
}
private function selectHandler(event:Event):void
{
var file:FileReference = FileReference(event.target);
file.removeEventListener("cancel", cancelHandler);
file.removeEventListener(Event.SELECT, selectHandler);
var fileTypeIndex:int = file.name.search(new
RegExp("\.[^\.]+$"));
var _fileType:String = fileTypeIndex >= 0 ?
file.name.slice(fileTypeIndex).toLowerCase() : "";
if (allowedExtensions.search(_fileType.toLowerCase()) == -1) {
Alert.show(String("File type not supported") + " (" +
allowedExtensions.replace(/\*\./g, "").replace(/;/g, ",").toUpperCase() + ")");
return;
}
if (!isNaN(maxFileSize) && file.size > maxFileSize * 1024) {
Alert.show(String("Maximum file size exceeded") + " ("
+ maxFileSize + " KB)");
return;
}
file.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
file.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
errorHandler);
file.addEventListener(Event.COMPLETE, completeHandler);
fileType = _fileType;
fileName = file.name;
file.load();
}
private function completeHandler(event:Event):void
{
var dispatcher:IEventDispatcher =
IEventDispatcher(event.target);
dispatcher.removeEventListener(IOErrorEvent.IO_ERROR,
errorHandler);
dispatcher.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);
dispatcher.removeEventListener(Event.COMPLETE, completeHandler);
fileData = Object(dispatcher).data;
}
private function errorHandler(event:Event):void
{
var dispatcher:IEventDispatcher =
IEventDispatcher(event.target);
dispatcher.removeEventListener(IOErrorEvent.IO_ERROR,
errorHandler);
dispatcher.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);
dispatcher.removeEventListener(Event.COMPLETE, completeHandler);
fileData = null;
}
In the view, you can have a Jewel BinaryImage that you will assign fileData to:
//xmlns:j="library://ns.apache.org/royale/jewel"
<j:BinaryImage binary="{fileData}" height="117" width="117"
click="loadFromFileSystem()" />
I don't know if this will help you ... (An example of this type is never bad,
right?)
Hiedra.
-----Mensaje original-----
De: Carlos Rovira <[email protected]>
Enviado el: lunes, 14 de septiembre de 2020 10:22
Para: Apache Royale Development <[email protected]>
Asunto: Re: Open ByteArray as file
Hi Hugo,
sure, don't worry I'm sure others will take a look soon.
thanks
El dom., 13 sept. 2020 a las 18:06, Hugo Ferreira (<[email protected]>)
escribió:
> OK.
> For now, I'm using my own implementation.
> If in a near future my fix is integrated in Royale framework, I will
> delete my implementation on use directly from Royle.
>
> Carlos Rovira <[email protected]> escreveu no dia domingo,
> 13/09/2020
> à(s) 15:52:
>
> > Hi Hugo,
> > since I don't have much use of that class hope others can review it
> > thanks
> >
> > El dom., 13 sept. 2020 a las 2:59, Hugo Ferreira (<
> [email protected]
> > >)
> > escribió:
> >
> > > FileReference fixed with a PR.
> > > My only issue is that I assumed PDF as default file type but one
> > > should gave a name any way or make the fileName mandatory.
> > >
> > > Hugo Ferreira <[email protected]> escreveu no dia sexta,
> 11/09/2020
> > > à(s) 14:54:
> > >
> > > > Hi Maria,
> > > >
> > > > Of course.
> > > > At the moment I can download a ByteArray that came from the
> > > > server, without violating any of the browser rules.
> > > > If I could open the file, it would be great.
> > > >
> > > > Maria Jose Esteve <[email protected]> escreveu no dia sexta,
> > 11/09/2020
> > > > à(s) 14:45:
> > > >
> > > >> Hello Hugo,
> > > >> I don't know if this will help you ...
> > > >>
> > > >> I could send you an example of "image opening" with from
> FileReference
> > > >> and its transfer to the backend as ByteArray by AMF3 ... Would
> > > >> it be
> > > useful?
> > > >>
> > > >> Hiedra
> > > >>
> > > >> -----Mensaje original-----
> > > >> De: Hugo Ferreira <[email protected]> Enviado el: jueves,
> > > >> 10 de septiembre de 2020 13:32
> > > >> Para: Apache Royale Development <[email protected]>
> > > >> Asunto: Re: Open ByteArray as file
> > > >>
> > > >> On my case I have a ByteArray returned from a AMF call to the
> server,
> > so
> > > >> it's not UI/MXML.
> > > >> On my Flex/AIR application I convert this ByteArray on a
> > > >> temporary
> > file
> > > >> and open it.
> > > >> Here I want to do the same (if I can avoid to create a
> > > >> temporary
> file
> > on
> > > >> the middle, would be a better way).
> > > >> A AS util function that I can reuse and encapsulates the JS
> > > >> code,
> > > perhaps
> > > >> the best approach ?
> > > >>
> > > >> Carlos Rovira <[email protected]> escreveu no dia quinta,
> > > >> 10/09/2020
> > > >> à(s) 11:12:
> > > >>
> > > >> > Hi,
> > > >> >
> > > >> > Since Royale is about encapsulating code that works through
> > platforms
> > > >> > (and in JS cross browser), I think it would be good to have a
> > > >> > bead
> > for
> > > >> > that at Core or Basic level.
> > > >> >
> > > >> > just my 2...
> > > >> >
> > > >> > El jue., 10 sept. 2020 a las 11:45, Harbs
> > > >> > (<[email protected]
> >)
> > > >> > escribió:
> > > >> >
> > > >> > > There is also a FileReference implementation in the mx package.
> > > >> > > mx has a DownloadButton which does what you want.
> > > >> > >
> > > >> > > You also might want to know about URLUtils.
> > > >> > >
> > > >> > > HTH,
> > > >> > > Harbs
> > > >> > >
> > > >> > > > On Sep 10, 2020, at 12:33 PM, Hugo Ferreira
> > > >> > > > <[email protected]>
> > > >> > > wrote:
> > > >> > > >
> > > >> > > > Sometimes it easy to forget that Royale at the end of the
> > > >> > > > day
> IS
> > > >> > > > JS :)
> > > >> > > >
> > > >> > > > Piotr Zarzycki <[email protected]> escreveu no
> > > >> > > > dia
> > > quinta,
> > > >> > > > 10/09/2020 à(s) 05:53:
> > > >> > > >
> > > >> > > >> Hi Hugo,
> > > >> > > >>
> > > >> > > >> I will just shot you with the tip - How would you do
> > > >> > > >> that in
> > pure
> > > >> JS ?
> > > >> > > - I
> > > >> > > >> think this maybe your answer ;)
> > > >> > > >>
> > > >> > > >> Thanks,
> > > >> > > >> Piotr
> > > >> > > >>
> > > >> > > >> czw., 10 wrz 2020 o 01:59 Hugo Ferreira <
> > [email protected]>
> > > >> > > >> napisał(a):
> > > >> > > >>
> > > >> > > >>> I have a ByteArray to comes from the server side.
> > > >> > > >>> I would like to open now the file.
> > > >> > > >>> With Flex (AIR), I use FileStream.
> > > >> > > >>> What's the equivalent here.
> > > >> > > >>> I would like to open the file.
> > > >> > > >>> If not possible (for security reasons since we are on
> > > >> > > >>> web space), at
> > > >> > > >> least
> > > >> > > >>> download the file, so the user can click on it.
> > > >> > > >>>
> > > >> > > >>> What is the Royale approach/code, for that ?
> > > >> > > >>>
> > > >> > > >>
> > > >> > > >>
> > > >> > > >> --
> > > >> > > >>
> > > >> > > >> Piotr Zarzycki
> > > >> > > >>
> > > >> > >
> > > >> > >
> > > >> >
> > > >> > --
> > > >> > Carlos Rovira
> > > >> > http://about.me/carlosrovira
> > > >> >
> > > >>
> > > >
> > >
> >
> >
> > --
> > Carlos Rovira
> > http://about.me/carlosrovira
> >
>
--
Carlos Rovira
http://about.me/carlosrovira