AMFPHP를 사용하여 파일을 다운로드 할 수 있는지 알 수 있습니까? 예를 들어 PHP에서 직접 다운로드 한 것을 발견했습니다. 그렇다면 몇 가지 예가 있습니까? AMFPHP를 사용하여 파일을 업로드하는 루틴이 있지만 AMFPHP를 사용하여 다운로드 할 웹에서 예제를 찾지 못했습니다.Flex AMFPHP를 사용하여 파일 다운로드
미리 감사드립니다.
AMFPHP를 사용하여 파일을 다운로드 할 수 있는지 알 수 있습니까? 예를 들어 PHP에서 직접 다운로드 한 것을 발견했습니다. 그렇다면 몇 가지 예가 있습니까? AMFPHP를 사용하여 파일을 업로드하는 루틴이 있지만 AMFPHP를 사용하여 다운로드 할 웹에서 예제를 찾지 못했습니다.Flex AMFPHP를 사용하여 파일 다운로드
미리 감사드립니다.
ByteArray로 시도해보십시오. 같은 새 값을 반환합니다. Amfphp_Core_Amf_Types_ByteArray ($ data);
이 문서가 적용되는 제품보기 : 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>
나를 위해 그것을 작동합니다! 적어도 내 개발 서버에서. 여기 보안 구멍에 유의하십시오. 악용을 방지하기 위해 어떤 형태의 보호 장치를 제공해야합니다.