限制Flex的Web App的上传文件格式和大小(服务器脚本PHP)

限制Flex的Web App的上传文件格式和大小(服务器脚本PHP)

问题描述:

我发现这个伟大的教程,关于上传文件有一个Flex应用程序,使用PHP做服务器的脚本给我们。限制Flex的Web App的上传文件格式和大小(服务器脚本PHP)

http://hybridhacking.com/tutorials/uploading-files-with-flex-using-php

它的伟大,但我想知道是什么改变了我应该在的ActionScript这样做只接受图像文件,并且如果可能的话,以限制文件大小上载并显示一条消息时,这些条件之一被违反。

编辑

文件过滤器&大小限制器完成。代码:

<?xml version="1.0" encoding="utf-8"?> 
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" width="800" height="500" showCloseButton="true" 
    creationComplete="init();"> 

    <mx:Script> 
     <![CDATA[ 

      private var urlRequest:URLRequest; 
      private var imagesFilter:FileFilter = new FileFilter("Images", "*.jpg;*.gif;*.png"); 
      private var fileReferenceList:FileReferenceList; 
      protected var maxSize = 600; 
      private function init():void { 
       urlRequest = new URLRequest('com-handler/n-prod.php'); 
       fileReferenceList = new FileReferenceList(); 
       fileReferenceList.addEventListener(Event.SELECT, fileSelectedHandler); 
      } 
      private function uploadFile():void { 
       fileReferenceList.browse([imagesFilter]); 
      } 
      private function fileSelectedHandler(event:Event):void { 
       var fileReference:FileReference; 
       var fileReferenceList:FileReferenceList = FileReferenceList(event.target); 
       var fileList:Array = fileReferenceList.fileList; 
       // get the first file that the user chose 
       fileReference = FileReference(fileList[0]); 
       if (fileReference.size > maxSize) 
       { 
        statusText.text='File excedds max allowed'; 
       } else { 
       // upload the file to the server side script 
       fileReference.addEventListener(Event.COMPLETE, uploadCompleteHandler); 
       fileReference.upload(urlRequest); 
       // update the status text 
       statusText.text = "Uploading..."; 
       } 
      } 
      private function uploadCompleteHandler(event:Event):void { 
       statusText.text = "File Uploaded: " + event.target.name; 
      } 


     ]]> 
    </mx:Script> 
    <mx:Label x="132" y="105" id="statusText"/> 
    <mx:Button x="132" click="uploadFile();" y="144" label="Button"/> 

</mx:TitleWindow> 

注意的maxSize值是以字节为单位。

PHP代码:

<?php 
$tempFile = $_FILES['Filedata']['tmp_name']; 
$fileName = $_FILES['Filedata']['name']; 
$fileSize = $_FILES['Filedata']['size']; 
move_uploaded_file($tempFile, "./" . $fileName); 
?> 

FileReference类具有size属性。在将文件发送到服务器之前,您可以获取该属性的值,并根据您希望允许的最大大小进行检查。

package 
{ 
    import flash.display.*; 
    import flash.net.*; 
    import flash.events.*; 

    public class TestReference extends MovieClip 
    { 
     protected var maxSize = 600; 

     public function TestReference():void 
     { 
      var ref:FileReference = new FileReference(); 
      ref.addEventListener(Event.SELECT, onFileSelect); 
      ref.browse(); 
     } 

     private function onFileSelect(e:Event):void 
     { 
      if (e.target.size > maxSize) { 
       // do some error handling 
      } 
     } 
    } 
} 
+0

我明白了。完成。谢谢。 – 2009-10-16 10:28:32

退房的size property on FileReference获得以字节为单位的文件的大小。

当您拨打browse() on FileReference来挑选文件时,您可以传入一个FileFilter对象的数组。这将允许您限制允许的文件类型。

+0

好,我设法做文件过滤器,但我不知道如何做大小限制器。你能帮助我吗? – 2009-10-15 23:37:58

+0

我的感谢也帮助文件过滤器。 – 2009-10-16 10:31:03

+0

用户选择文件后,检查大小。如果它太大,说他们必须选择一个较小的文件。您无法像过滤文件类型一样自动过滤上传对话框中的文件。 – joshtynjala 2009-10-19 19:34:09