2010-07-14 7 views
6

Necesito que el usuario descargue el archivo JPEG de mi aplicación, sin embargo, cuando el usuario cambia el nombre del archivo, el archivo guardado se descargará sin extensión.Perdiendo extensión cuando uso FileReference descarga

Por ejemplo: Estoy usando FileReference.download() y configuré el nombre de archivo predeterminado como "demoPic.jpg" y la extensión del archivo de control de configuración del sistema de Windows del usuario no se muestra. Entonces, cuando el diálogo abre una ventana de descarga, solo se muestra "demoPic" como el nombre del archivo. Si el usuario guardó el archivo sin cambiar el nombre del archivo, el archivo guardado estará bien. Pero si el usuario cambia el nombre del archivo, el archivo de descarga se guardará sin extensión. ¿es posible agregar la extensión de archivo al nombre del archivo cuando el usuario lo olvida por código flexible?

Respuesta

1

Tengo el mismo problema y no pude solucionarlo hasta ahora. Parece que es un problema con flash + windows. :(lo siento para informar pero no se halló ninguna solución.

Si esto se puede llamar una solución, es de alguna manera para advertir a los usuarios y pedirles que colocar también la extensión cuando se cambie el nombre del archivo.

+0

Gracias por su respuesta, Pirvulescu. Lo que puedo hacer es agregar un cheque aquí y advertir al usuario que ingrese el nombre completo del archivo con la extensión. Estoy buscando una manera más cómoda de agregar automáticamente la extensión de archivo.¿Alguien puede sugerir cómo se puede hacer esto? – xuchen

1

Tenía misma Problema: se utiliza CONCAT para agregar extensión manualmente. No aparece en el cuadro de diálogo al guardar, pero SÍ guarda como un archivo de texto con extensión .txt cuando se ve en el Explorador de Windows. Parece que no funciona pero realmente lo hace!

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

// Crear texto para guardar desde el campo de texto var newDataFile: TextField = new TextField(); newDataFile.text = myTextField.text; // crear referencia de archivo para guardar el archivo archivo var: FileReference = new FileReference(); file.save (newDataFile.text, final_filename);

2

Se trata de un problema conocido de Flash Player. Una solicitud de mejora se archiva con Adobe. Visite y vote para él: https://bugs.adobe.com/jira/browse/FP-2014

No parece práctico entrenar a los usuarios para no cambiar el nombre del archivo. Aquí está la solución que uso para mi aplicación:

  • El problema solo ocurre en Windows con el complemento ActiveX. Detectar ActiveX con Capabilities.playerType (solo ~ 25% de los usuarios en mi experiencia)

  • Si el complemento ActiveX, vuelve a 'navigateToURL()' para hacer que el archivo rebote en tu servidor. Usar esta función es menos deseable que FileReference.download() porque es menos controlable (el navegador está a cargo, en lugar de su aplicación), pero da como resultado un cuadro de diálogo Guardar, donde el usuario puede cambiar el nombre del archivo de forma segura.

1

sólo tiene que utilizar navigateToURL (ur)

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

"descarga" FileBrowser llamada a un método y luego llamar servlet. entonces flex no puede coger extensión de archivo

pero "navigateToURL" llamado servlet servlet primero y luego llamar FileBrowser continuación html puede coger extensión de archivo

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