2010-07-14 54 views
6

我需要用户从我的应用下载JPEG文件,但是,当用户更改文件名时,保存的文件将被下载而没有扩展名。使用时丢失扩展名FileReference下载

例如:我正在使用FileReference.download()并将默认文件名设置为“demoPic.jpg”,并且未显示用户的windows系统设置控制文件扩展名。所以当对话框打开一个下载窗口时,只显示“demoPic”作为文件名。如果用户保存文件而不更改文件名,保存的文件将会正常。但是,如果用户更改文件名,下载文件将被保存而不会扩展名。当用户用flex代码忘记文件扩展名时,是否可以添加文件扩展名?

回答

1

我有同样的问题,直到现在还不能解决它。这似乎是与闪光+窗户的问题。 :(遗憾地通知,但我并没有发现任何修复。

如果这可以被称为一个解决办法,就是以某种方式提醒用户,询问他们时,他们重命名文件也将延长。

+0

谢谢您的回复,Pirvulescu。我可以做的是在这里添加一个支票,并警告用户输入带扩展名的整个文件名。我正在寻找一种更加舒适的方式来自动添加文件扩展名。有人可以建议如何做到这一点? – xuchen 2010-07-14 06:02:35

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

2

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

培养用户不要重命名文件似乎不实际。这里是我用于我的应用程序的解决方法:

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

  • 如果ActiveX插件回退到'navigateToURL()'以反弹服务器上的文件。使用此函数比FileReference.download()更不理想,因为它的可控性较差(浏览器负责,而不是您的应用程序),但它会生成一个“保存”对话框,用户可以在其中安全地重命名该文件。

1

你只需要使用的navigateToUrl(UR)

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

“下载” 方法调用fileBrowser,然后调用servlet的。 然后弯曲不能赶上文件扩展名

但“的navigateToUrl”之称的servlet第一则servlet作调用fileBrowser 然后HTML可以捕获文件扩展名

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); 
       } 
相关问题