【问题标题】:How to write multiple files using adobe flex如何使用 adobe flex 写入多个文件
【发布时间】:2016-02-23 09:45:52
【问题描述】:

我有一个字符串数组,其中每个对象都有逗号分隔和换行符。现在我想将这些字符串对象写入多个 CSV 文件。但我只能写一个 CSV 文件,如下所示:-

        /**
         * callback method for exportCollection, results are in format of Map<String, String>
         **/
        protected function exportListResultHandler(event:ResultEvent):void {
            if (event.result != null )
            {
                for (var key:* in event.result) {
                    var value:String=event.result[key];
                    var fileName:String=key;
                    exportStringToFile(value.toString(), fileName);
                }
            }
        }

        private function exportStringToFile(stringToExport:String, filename:String=null):void
        {               
            //file refernce for import/export functionality. 
            var fileRef:FileReference = new FileReference(); 

            try{
                fileRef.addEventListener(Event.COMPLETE, finishUpload);            
                fileRef.addEventListener(IOErrorEvent.IO_ERROR, handleError);
                fileRef.save(stringToExport, filename);                
            }catch (error:Error){
                logger.error("Unable to save file. Error: ", error);  

        }

我现有的代码不允许我使用 flash.filesystem 包中的 File 类。甚至 FileReference 数组也没有帮助我。我想在一个位置保存多个文件。

我是 Adob​​e flex 和 flash builder 的新手,任何帮助都会很棒。非常感谢

【问题讨论】:

  • 我猜你的代码看起来不错 - 如果你的结果中有多个键,它应该保存多个文件。那么究竟是什么不工作?您是否尝试过调试并查看结果中是否有多个不同的键?
  • Kishore,出于安全原因,浏览器应用程序不能一次保存多个文件。最终用户必须通过弹出对话框选择在每个文件上单击“保存”。这是您的选择,否则,按照建议,制作一个 zip 文件。还有为什么不var value:String = String(event.result[key]);?尝试在这两个函数中使用trace 来检查是否有多个条目通过。

标签: actionscript-3 flash flex4.5 mxml


【解决方案1】:

如果您正在创建 AIR 应用程序?如果是,为什么不使用 FileStream 将字符串保存到文件?

var stream:FileStream = new FileStream;
stream.open (targetPath, FileMode.WRITE);
stream.writeUTFBytes (s);
stream.close();

使用 FileReference 保存文件会打开对话框(安全问题),如果你想保存多个文件会很烦人

但是,如果您为非 AIR 应用程序/基于浏览器 (web) 的应用程序工作,其他选项是您可以使用服务器端代码保存所有文件,然后在客户端下载。当然,这个选项会让你的服务器做额外的工作,尤其是在高流量时

【讨论】:

  • 我正在使用基于浏览器的应用程序,因此无法使用 FileStream。您能否提供一些下载服务器端文件的选项。
  • 您的服务器端/后端编程语言是什么?您需要在后端处理每个文件,而不是将它们全部打包在 zip 文件中。在使用 FileReference 下载 zip 文件之前
  • @Januartha,有一个 ZIP 文件创建器可以直接在 AS3 中使用。它被称为 FZIP。
  • 嗯,当然,使用使用任何 as3 Zip 库打包的 byteArray,但您仍然需要先创建每个 .csv 文件
  • 感谢 Januartha,我尝试使用 servlet,我能够使用它
【解决方案2】:

Flash 播放器不允许您循环保存多个文件。浏览器中的FP必须打开一个文件保存对话框来保存文件。在给定的场景中,简单而优雅的方法是使用 nochump 库在客户端创建一个 zip 文件,并在其中添加每个 csv,然后使用浏览器 Flash 播放器将该 zip 文件保存在磁盘上。下面是一个代码示例

var zipOut:ZipOutput=   new ZipOutput();
var ze1:ZipEntry    =   new ZipEntry("csv.csv");
zipOut.putNextEntry(ze1);
zipOut.write(byte_array_to_your_csv_string);
zipOut.closeEntry();

然后让播放器保存这个 zip 文件。

你可以从https://github.com/mazerte/openflow-as3/tree/master/src/nochump/util/zip下载nochump AS3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多