问题
I have function that create docx or odt file. I need automaticly to open this file in microsoft/libre office, right after creation complete. How to coding this in flex/as3 ?
protected function create003(docType:String, patientID:String):void
{
create003Result.token = nhealthReports.create003(docType, patientID);
}
protected function getFormModuleDataResult_resultHandler(event:ResultEvent):void
{
var pathToFile:String;
pathToFile=create003Result.lastResult; // this is path to created file
// here i need some code from you
}
<nhealthreports:NhealthReports id="nhealthReports"
showBusyCursor="true"/>
<s:CallResponder id="create003Result" result="getFormModuleDataResult_resultHandler(event)"/>
回答1:
So you'd need to first download the file to the user's machine and then open it. Something like this should do it (copy pasted stuff from my projects so you might need to adjust it a bit).
Also your server might need a crossdomain file so your app can load files from it.
private function getFormModuleDataResult_resultHandler(event:ResultEvent):void
{
// load file
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, onLoadingComplete);
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.load(new URLRequest(pathToFile));
}
private function onLoadingComplete(event:Event):void
{
// get the data as bytearray
var data:ByteArray = event.target.data;
// you will probably need to figure this out from your server path or define your own here
var fileName:String = "MyFilename.doc";
// create a file under the application storage directory (C:\Users\YOURUSERHERE\AppData\Roaming\RateBook\Local Store)
// you can store the file anywhere but it is recommended to do it here
// as users with restricted access on their machines (non-admin users) might have trouble saving the files elsewhere
var file:File = File.applicationStorageDirectory.resolvePath(fileName);
//create a file stream to be able to write the content of the file
var fileStream:FileStream = new FileStream();
//open the file stream and set for Write
fileStream.open(file, FileMode.WRITE);
//writes the bytes
fileStream.writeBytes(data, 0, data.length);
//close the stream
fileStream.close();
// by now the file should be saved to disk, let's open it
// Naturally this assumes that the user have the file extension (like .doc) associated with the correct program (MS Word)
file.openWithDefaultApplication();
}
来源:https://stackoverflow.com/questions/37153929/flex-as3-how-to-open-docx-odt-file