2012-12-10 5 views
0

AMFPHP를 사용하여 파일을 다운로드 할 수 있는지 알 수 있습니까? 예를 들어 PHP에서 직접 다운로드 한 것을 발견했습니다. 그렇다면 몇 가지 예가 있습니까? AMFPHP를 사용하여 파일을 업로드하는 루틴이 있지만 AMFPHP를 사용하여 다운로드 할 웹에서 예제를 찾지 못했습니다.Flex AMFPHP를 사용하여 파일 다운로드

미리 감사드립니다.

답변

0

ByteArray로 시도해보십시오. 같은 새 값을 반환합니다. Amfphp_Core_Amf_Types_ByteArray ($ data);

0

이 문서가 적용되는 제품보기 : http://gertonscorner.wordpress.com/2009/03/15/fileupload-using-amfphp-remoteobject-and-flash-10/. 내 서비스가 amfphp의 섹션 인 Your first Project using Amfphp에 설명 된 방법으로 service-config.xml을 통해 정의되기 때문에이 사이트를 기반으로 자체 버전을 만들었습니다.

서버 SIDE :

이미 서비스 클래스와 값 객체 클래스 모두에 도달하기 위해 게이트웨이를 구성하는 방법을 알고, 여기에 두 개의 클래스입니다 :

ValueObject 등급 :

<?php 
class FileVO { 

    public $filename; 
    public $filedata; 

    // explicit actionscript class 
    var $_explicitType = "remoting.vo.FileVO"; 
} 
?> 

서비스 클래스 :

<?php 
class RemoteFile { 
/** 
* Upload files! 
* 
* @param FileVO $file 
* @return string 
**/ 
    public function upload(FileVO $file) { 
    $data = $file->filedata->data; 
    file_put_contents(UPLOAD_PATH . $file->filename, $data); 
    return 'File: ' . $file->filename .' Uploaded '; 
    } 
} 
?> 

당신이 알 때, 우리는 파일을 넣는 디렉토리 인 상수 UPLOAD_PATH를 가지고 있습니다.이 디렉토리에있는 파일의 이름은 클라이언트에서 온 이름입니다. 물론 이것을 변경해야하지만, 지금은이 예제의 범위를 벗어납니다.

클라이언트 측 :

package remoting.vo 
{ 
import flash.utils.ByteArray; 

    [RemoteClass(alias="FileVO")] 
    public class FileVO{ 
    public var filename:String; 
    public var filedata:ByteArray; 

    public function FileVO(){ 
    } 

    } 
} 

구성 요소과 : ActionScrip 파일로 저장 내가 값 객체 클래스와 패키지를 빌드 플렉스 프로젝트의 src 폴더에 클라이언트 측에

, 파일 업로드 중 :

<?xml version="1.0" encoding="utf-8"?> 
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx" 
     xmlns:net="flash.net.*"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
     <net:FileReference id="fileReference" 
          select="select_handler(event)" 
          complete="complete_handler(event);" 
          /> 
     <s:RemoteObject id="ro" 
         destination="amfphp" 
         source="RemoteFile" 
         result="handleResult(event)" 
         fault="Alert.show('Error ! ')"/> 
    </fx:Declarations> 

    <fx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 
      import mx.rpc.events.ResultEvent; 

      import remoting.vo.FileVO; 

      public function handleResult(event:ResultEvent):void{ 
       Alert.show('the server said : ' + event.result); 
      } 

      private function btn_click(evt:MouseEvent):void { 
       fileReference.browse(); 
      } 
      private function select_handler(evt:Event):void{ 
       fileReference.load(); 
      } 
      private function complete_handler(evt:Event):void{ 
       var data:ByteArray = new ByteArray(); 
       var file:FileVO; 

       //Read the bytes into bytearray var 
       fileReference.data.readBytes(data, 0, fileReference.data.length); 

       // Create a new FileVO instance 
       file = new FileVO(); 
       file.filename = fileReference.name; 
       file.filedata = data; 
       ro.upload(file); 
      } 

      private function onEvent(evt:Event):void { 
      Alert.show(evt.toString(), evt.type); 
      } 
     ]]> 
    </fx:Script> 
    <s:Button id="btn" label="Browse to Upload" click="btn_click(event);" /> 
</s:Group> 

나를 위해 그것을 작동합니다! 적어도 내 개발 서버에서. 여기 보안 구멍에 유의하십시오. 악용을 방지하기 위해 어떤 형태의 보호 장치를 제공해야합니다.

관련 문제