2016-02-23 14 views
0

У меня есть строковый массив, где каждый объект имеет разделенные запятыми и новые разделители строк. Теперь я хочу записать эти строковые объекты в несколько файлов CSV. Но я могу написать только один CSV файл, как показано ниже: -Как написать несколько файлов с помощью adobe flex

 /** 
     * 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); 

     } 

Mine существующие коды не позволяют мне использовать класс File из пакета flash.filesystem. Даже массивы FileReference не помогли мне. Я хочу сохранить несколько файлов в одном месте.

Я новичок в Adobe flex и Flash-строителе. Любая помощь будет отличной. Спасибо a

+0

Ваш код выглядит хорошо, я думаю - если бы иметь несколько ключей в ваш результат, он должен сохранить несколько файлов. Так что же не работает? Вы пытались отладить и посмотреть, есть ли у вас несколько разных ключей в вашем результате? – Philarmon

+0

Kishore, браузерное приложение не может просто сохранить сразу несколько файлов из соображений безопасности. Конечный пользователь должен выбрать «сохранить» для каждого файла с помощью всплывающего диалогового окна. Это ваш вариант, или, как было предложено, сделать zip-файл. Также почему не 'var value: String = String (event.result [key]);'? Попробуйте использовать 'trace' в обеих функциях, чтобы проверить, проходит ли больше одной записи. –

ответ

1

Если вы создаете приложение AIR? Если да, почему бы не использовать FileStream для сохранения String в файл?

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

Использование FileReference для сохранения файла диалогового окна (безопасность вещи) и будет раздражать, если вы хотите сохранить несколько файлов

Но если вы работаете приложения не-AIR/браузер (веб) на основе приложения откроется другой вариант - вы можете сохранить все файлы с использованием кода на стороне сервера, а затем загрузить его на клиент. Конечно, этот вариант заставит ваш сервер выполнять дополнительные задания, особенно для высоких потоков трафика.

+0

Я использую приложения на основе браузера, поэтому я не могу использовать FileStream. Можете ли вы предоставить некоторую возможность загрузить файл на стороне сервера. – Kishore

+0

Какой язык программирования на стороне сервера/бэкэнд? вам нужно обработать каждый файл на сервере, а не упаковать все файлы в zip-файле. перед использованием FileReference для загрузки zip-файла – Januartha

+0

@Januartha существует создатель ZIP-файла для непосредственного использования в AS3. Это называется FZIP. –

1

Flash Player не позволит вам сохранять несколько файлов в цикле. Чтобы сохранить файл, FP в браузере должен открыть диалоговое окно сохранения файла. В данном сценарии простым и элегантным способом является создание zip-файла на стороне клиента с использованием библиотеки nochump и добавление каждого csv внутри, а затем сохранение этого zip-файла на диске с помощью браузера flash-плеера. Пример кода следующий

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(); 

затем попросите игрока сохранить этот почтовый файл.

Вы можете скачать nochump AS3 из https://github.com/mazerte/openflow-as3/tree/master/src/nochump/util/zip