使用FileReference下载时丢失扩展名

时间:2010-07-14 05:22:58

标签: flex actionscript-3 download

我需要用户从我的应用程序下载JPEG文件,但是,当用户更改文件名时,将保存的文件将在没有扩展名的情况下下载。

例如:我正在使用FileReference.download()并将默认文件名设置为“demoPic.jpg”,并且未显示用户的Windows系统设置控件文件扩展名。因此,当对话框打开下载窗口时,只有“demoPic”显示为文件名。如果用户保存文件而不更改文件名,则保存的文件即可。但是,如果用户更改文件名,下载文件将保存而不会扩展。当用户忘记灵活编码时,是否可以将文件扩展名添加到文件名?

5 个答案:

答案 0 :(得分:2)

这是Flash Player的一个已知问题。向Adobe提交了增强请求。请访问并投票https://bugs.adobe.com/jira/browse/FP-2014

训练用户不要重命名文件似乎不切实际。以下是我用于我的应用的解决方法:

  • 问题只发生在带有ActiveX插件的Windows上。使用Capabilities.playerType检测ActiveX(根据我的经验,只有约25%的用户)

  • 如果是ActiveX插件,请回到'navigateToURL()'以退回服务器上的文件。使用此函数比FileReference.download()更不可取,因为它不太可控(浏览器负责,而不是你的应用程序),但它会导致一个Save对话框,用户可以安全地重命名文件。

答案 1 :(得分:1)

我有同样的问题,直到现在才能解决它。这似乎是flash + windows的一个问题。 :(很抱歉通知但我没有找到任何修复。

如果这可以称为变通方法,则以某种方式警告用户并要求他们在重命名文件时也放置扩展名。

答案 2 :(得分:1)

有同样的问题。使用CONCAT手动添加扩展名。保存时它不会出现在对话框中,但在Windows资源管理器中查看时,它会保存为扩展名为.txt的文本文件。似乎没有用,但确实有效!

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

答案 3 :(得分:1)

你只需要使用navigateToUrl(ur)

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

“download”方法调用fileBrowser然后调用servlet。 然后flex无法捕获文件扩展名

但是“navigateToUrl”首先调用servlet然后调用servlet调用fileBrowser 然后html可以捕获文件扩展名

答案 4 :(得分:0)

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