2010-07-14 35 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); 
       }