我需要用户从我的应用程序下载JPEG文件,但是,当用户更改文件名时,将保存的文件将在没有扩展名的情况下下载。
例如:我正在使用FileReference.download()并将默认文件名设置为“demoPic.jpg”,并且未显示用户的Windows系统设置控件文件扩展名。因此,当对话框打开下载窗口时,只有“demoPic”显示为文件名。如果用户保存文件而不更改文件名,则保存的文件即可。但是,如果用户更改文件名,下载文件将保存而不会扩展。当用户忘记灵活编码时,是否可以将文件扩展名添加到文件名?
答案 0 :(得分:2)
这是Flash Player的一个已知问题。向Adobe提交了增强请求。请访问并投票:https://bugs.adobe.com/jira/browse/FP-2014
训练用户不要重命名文件似乎不切实际。以下是我用于我的应用的解决方法:
问题只发生在带有ActiveX插件的Windows上。使用Capabilities.playerType检测ActiveX(根据我的经验,只有约25%的用户)
如果是ActiveX插件,请回到'navigateToURL()'以退回服务器上的文件。使用此函数比FileReference.download()更不可取,因为它不太可控(浏览器负责,而不是你的应用程序),但它会导致一个Save对话框,用户可以安全地重命名文件。
答案 1 :(得分:1)
我有同样的问题,直到现在才能解决它。这似乎是flash + windows的一个问题。 :(很抱歉通知但我没有找到任何修复。
如果这可以称为变通方法,则以某种方式警告用户并要求他们在重命名文件时也放置扩展名。
答案 2 :(得分: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);
答案 3 :(得分:1)
你只需要使用navigateToUrl(ur)
var ur:URLRequest=new URLRequest();
var fr:FileReference=new FileReference();
fr.download(ur,<FILENAME>);
“download”方法调用fileBrowser然后调用servlet。 然后flex无法捕获文件扩展名
但是“navigateToUrl”首先调用servlet然后调用servlet调用fileBrowser 然后html可以捕获文件扩展名
答案 4 :(得分: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);
}