Потеря расширения при использовании FileReference - PullRequest
6 голосов
/ 14 июля 2010

Мне нужно, чтобы пользователь скачал файл JPEG из моего приложения, однако, когда пользователь изменит имя файла, сохраненный файл будет загружен без расширения.

Например: я использую FileReference.download () и задаю имя файла по умолчанию как «demoPic.jpg», а расширение контрольного файла настроек системы Windows пользователя не отображается. Поэтому, когда диалоговое окно открывает окно загрузки, в качестве имени файла отображается только «demoPic». Если пользователь сохранил файл без изменения имени файла, сохраненный файл будет в порядке. Но если пользователь изменит имя файла, загружаемый файл будет сохранен без расширения. Можно ли добавить расширение файла к имени файла, когда пользователь забудет его по гибкому коду?

Ответы [ 5 ]

2 голосов
/ 23 января 2012

Это известная проблема с Flash Player.Запрос на улучшение подан в Adobe.Пожалуйста, посетите и проголосуйте за него : https://bugs.adobe.com/jira/browse/FP-2014

Обучение пользователей не имеет смысла переименовывать файл.Вот обходной путь, который я использую для своего приложения:

  • Проблема возникает только в Windows с плагином ActiveX.Обнаружение ActiveX с Capabilities.playerType (только ~ 25% пользователей в моем опыте)

  • Если плагин ActiveX, вернитесь к «navigateToURL ()» для возврата файла на ваш сервер.Использование этой функции менее желательно, чем FileReference.download (), поскольку она менее управляема (браузер отвечает не за ваше приложение), но приводит к появлению диалогового окна «Сохранить», в котором пользователь может безопасно переименовать файл.

1 голос
/ 24 июля 2012

вам просто нужно использовать navigateToUrl (ur)

var ur:URLRequest=new URLRequest();
var fr:FileReference=new FileReference();
fr.download(ur,<FILENAME>);

«скачать» вызов метода fileBrowser и затем вызвать сервлет. затем flex не может поймать расширение файла

но "navigateToUrl" сначала вызывал сервлет, затем вызывал сервлет тогда HTML может поймать расширение файла

1 голос
/ 16 марта 2011

Была такая же проблема.Используется CONCAT для ручного добавления расширения.Он не отображается в диалоговом окне при сохранении, но ДЕЙСТВИТЕЛЬНО сохраняется как текстовый файл с расширением .txt при просмотре в проводнике Windows.Кажется, не работает, но на самом деле работает!

var final_filename:String = filename.concat(".txt");

// Создать текст для сохранения из текстового поля var newDataFile: TextField = new TextField ();newDataFile.text = myTextField.text;// создать ссылку на файл для сохранения файла var file: FileReference = new FileReference ();file.save (newDataFile.text, final_filename);

1 голос
/ 14 июля 2010

У меня та же проблема, и я не смог ее исправить до сих пор.Кажется, это проблема с flash + windows.:( Извините, что сообщил, но я не нашел никакого исправления.

Если это можно назвать обходным решением, это как-то предупредить пользователей и попросить их также указать расширение при переименовании файла.

0 голосов
/ 22 апреля 2016
protected function downloadImage():void
            {
                loadImage();
            }    
public function loadImage():void
                {
                    var NowDate:Date=new Date();
                    var dateStr:String=String(NowDate.date)+'-'+String(NowDate.month)+'-'+
                        String(NowDate.fullYear)+' '+String(NowDate.hours)+'-'+String(NowDate.minutes)+'-'+String(NowDate.seconds);
                    var file:File= File.desktopDirectory.resolvePath('image_'+dateStr);;
                    file.addEventListener(Event.SELECT,onSelect);
                    file.browseForSave("Save image");

                }
                public var filePath:String='';
                public var fileName:String='';
                public function onSelect(event:Event):void
                {
                    var loader:Loader = new Loader();
                    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadcompleteHandler);
                    loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioError);
                    loader.load(new URLRequest(img_path));
                    fileName=event.target.name;
                    filePath=event.target.url;
                }
                private var _bitmapData:BitmapData;
                public function loadcompleteHandler(event:Event):void
                {
                    var loaderInfo:LoaderInfo = event.target as LoaderInfo;
                    var bitmap:Bitmap = loaderInfo.content as Bitmap;
                    _bitmapData = bitmap.bitmapData;
                    var imgByteArray:ByteArray;
                    var jpegEncoder:JPEGEncoder = new JPEGEncoder(80);
                    imgByteArray = jpegEncoder.encode(_bitmapData);
                    var file:File = new File(filePath+'.jpg');
                    var fileStream:FileStream = new FileStream();
                    fileStream.open(file, FileMode.WRITE);
                    fileStream.writeBytes(imgByteArray);
                    fileStream.close();
                    pop.status_text("Photo Downloaded Successfully",1);
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...