2010-07-14 32 views
6

Tôi cần người dùng tải xuống tệp JPEG từ ứng dụng của mình, tuy nhiên, khi người dùng thay đổi tên tệp, tệp đã lưu sẽ được tải xuống mà không cần gia hạn.Mất tiện ích khi sử dụng FileReference tải xuống

Ví dụ: Tôi đang sử dụng FileReference.download() và đặt tên tệp mặc định là "demoPic.jpg" và phần mở rộng tệp điều khiển thiết lập hệ thống cửa sổ của người dùng không được hiển thị. Vì vậy, khi hộp thoại mở một cửa sổ tải xuống, chỉ "demoPic" được hiển thị dưới dạng tên tệp. Nếu người dùng lưu tệp mà không thay đổi tên tệp, tệp đã lưu sẽ là OK. Nhưng nếu người dùng thay đổi tên tệp, tệp tải xuống sẽ được lưu mà không có phần mở rộng. là nó có thể thêm phần mở rộng tập tin vào tên tập tin khi người dùng quên nó bằng mã flex?

Trả lời

1

Tôi có cùng một vấn đề và không thể khắc phục nó cho đến bây giờ. Có vẻ như đó là sự cố với flash + cửa sổ. :(tiếc khi thông báo nhưng tôi đã không tìm thấy bất kỳ sửa chữa.

Nếu điều này có thể được gọi là một workaround, là bằng cách nào đó để cảnh báo người sử dụng và yêu cầu họ đặt cũng mở rộng khi họ đổi tên tập tin.

+0

Cảm ơn bạn đã trả lời của bạn, Pirvulescu. Những gì tôi có thể làm là thêm một kiểm tra ở đây, và cảnh báo người dùng để nhập toàn bộ tên tập tin với phần mở rộng. Tôi đang tìm một cách thoải mái hơn mà tự động thêm phần mở rộng tập tin.Ai đó có thể đề nghị làm thế nào điều này có thể được thực hiện? – xuchen

1

Đã cùng Sử dụng CONCAT để tự thêm tiện ích mở rộng. Nó không xuất hiện trong hộp thoại khi lưu nhưng KHÔNG lưu dưới dạng tệp văn bản có đuôi .txt khi được xem trong Windows Explorer. Có vẻ như không hoạt động nhưng thực tế!

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

// Tạo văn bản để lưu từ trường văn bản var newDataFile: TextField = new TextField(); newDataFile.text = myTextField.text; // tạo tham chiếu tệp để lưu tệp tệp var: FileReference = new FileReference(); file.save (newDataFile.text, final_filename);

2

Đây là sự cố đã biết với Flash Player. Yêu cầu nâng cao được gửi bằng Adobe. Vui lòng truy cập và bỏ phiếu cho nó: https://bugs.adobe.com/jira/browse/FP-2014

Có vẻ như không thực tế để đào tạo người dùng không đổi tên tệp. Đây là giải pháp mà tôi sử dụng cho ứng dụng của mình:

  • Sự cố chỉ xảy ra trên Windows với plugin ActiveX. Phát hiện ActiveX với Capabilities.playerType (chỉ ~ 25% người dùng trong trải nghiệm của tôi)

  • Nếu plugin ActiveX, quay trở lại 'navigationToURL()' để trả lại tệp trên máy chủ của bạn. Sử dụng hàm này kém hấp dẫn hơn FileReference.download() vì nó ít có khả năng điều khiển (trình duyệt chịu trách nhiệm hơn là ứng dụng của bạn), nhưng kết quả là hộp thoại Lưu nơi người dùng có thể đổi tên tệp một cách an toàn.

1

bạn chỉ cần sử dụng navigateToURL (ur)

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

"tải về" phương pháp gọi fileBrowser và sau đó gọi servlet. sau đó flex không thể bắt tập tin mở rộng

nhưng "navigateToURL" gọi là servlet đầu tiên sau đó servlet gọi fileBrowser sau đó html có thể bắt mở rộng tập tin

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); 
       } 
Các vấn đề liên quan