Skip to main content

Download a file using FileReference in Flex

Following function gives an example of how to doanload a file in Flex.
"file" object passed to the function is a simple object having following structure:
file.fileName = "Abc.png"
file.fileType = "image/png"
file.url = "/documents/Abc.png"
A pattern match-replacement is used to determine file extension, in case fileName does not have it.

public function downloadFile(file:Object):void
{
    if (file != null)
    {
        var fileName:String = (file.fileName != null && file.fileName.length > 0) ? file.fileName : (new Date()).time.toString();
        var fileExtension:String = file.fileExtension;

        if (fileName.indexOf(".") < 0)
        {
            if (fileExtension.lastIndexOf(".") >= 0)
                fileExtension = fileExtension.slice(fileExtension.lastIndexOf("."), fileExtension.length);
            else if (fileExtension.lastIndexOf("/") >= 0)
                fileExtension = "." + fileExtension.slice(fileExtension.lastIndexOf("/"), fileExtension.length);
            else
                fileExtension = "." + fileExtension;

            // Replace characters not supported by download.  / \ : * ? " < > | % with _
            var pattern:RegExp = /([\/\\:\*\?\"\<\>\|\%])/g;
            fileName += fileExtension.replace(pattern, "_");
        }

        var urlRequest:URLRequest = new URLRequest(file.url);
        var fileRef:FileReference = new FileReference();
        fileRef.addEventListener(IOErrorEvent.IO_ERROR, fileDownloadError);
        fileRef.download(urlRequest, fileName);
    }

    function fileDownloadError(event:IOErrorEvent):void
    {
        Alert.show("Error encountered while downloding the file:\n." + event.text, "Error");
    }
}

Comments