2010-07-14 5 views
6

J'ai besoin de télécharger un fichier JPEG de mon application, cependant, lorsque l'utilisateur change le nom du fichier, le fichier sauvegardé sera téléchargé sans extension. Par exemple: J'utilise FileReference.download() et définissez le nom de fichier par défaut en tant que "demoPic.jpg" et l'extension du fichier de contrôle des paramètres système Windows de l'utilisateur n'est pas affichée. Ainsi, lorsque la boîte de dialogue ouvre une fenêtre de téléchargement, seul "demoPic" apparaît comme nom de fichier. Si l'utilisateur a enregistré le fichier sans changer le nom de fichier, le fichier sauvegardé sera OK. Mais si l'utilisateur change de nom de fichier, le fichier de téléchargement sera sauvegardé sans extension. est-il possible d'ajouter l'extension de fichier au nom de fichier lorsque l'utilisateur l'oublie en code flexible?Perdre l'extension lors de l'utilisation FileReference download

Répondre

1

J'ai le même problème et je n'ai pas réussi à le réparer jusqu'à maintenant. Il semble que ce soit un problème avec flash + windows. :(désolé d'informer mais je ne l'ai pas trouvé de solution.

Si cela peut être appelé une solution de contournement, est en quelque sorte d'avertir les utilisateurs et leur demander de placer aussi l'extension quand ils renommer le fichier.

+0

Merci pour votre réponse, Pirvulescu. Ce que je peux faire est d'ajouter une vérification ici, et d'avertir l'utilisateur d'entrer le nom de fichier complet avec l'extension. Je cherche un moyen plus confortable que l'ajout automatique de l'extension de fichier.Quelqu'un peut-il suggérer comment cela peut être fait? – xuchen

1

Had même Problème: utilisé par CONCAT pour ajouter manuellement l'extension.Il n'apparaît pas dans la boîte de dialogue lors de l'enregistrement, mais il est sauvegardé en tant que fichier texte avec une extension .txt dans l'Explorateur Windows.Il ne semble pas fonctionner mais fonctionne réellement!

// Créer du texte à enregistrer à partir du champ de texte var newDataFile: TextField = new TextField(); newDataFile.text = myTextField.text; // créer une référence de fichier pour enregistrer le fichier var fichier: FileReference = new FileReference(); file.save (newDataFile.text, final_filename);

2

Ceci est un problème connu avec Flash Player. Une demande d'amélioration est déposée auprès d'Adobe. S'il vous plaît visitez et voter pour cela: https://bugs.adobe.com/jira/browse/FP-2014

Il ne semble pas pratique de former les utilisateurs de ne pas renommer le fichier. Voici la solution de contournement que j'utilise pour mon application:

  • Le problème se produit uniquement sur Windows avec le plug-in ActiveX. Détecter ActiveX avec Capabilities.playerType (seulement ~ 25% des utilisateurs dans mon expérience)

  • Si le plugin ActiveX, revenez à 'navigateToURL()' pour faire rebondir le fichier sur votre serveur. Utiliser cette fonction est moins souhaitable que FileReference.download() car il est moins contrôlable (le navigateur est responsable, plutôt que votre application), mais il en résulte une boîte de dialogue Enregistrer où l'utilisateur peut renommer le fichier en toute sécurité.

1

vous devez juste utiliser navigateToUrl (ur)

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

méthode FileBrowser d'appel "téléchargement" et puis servlet appeler. puis flex ne peut pas attraper extension de fichier

mais "navigateToUrl" appelé servlet premier servlet puis appelez FileBrowser alors html peut attraper l'extension de fichier

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