0

AMFPHP を使用してファイルをダウンロードできるかどうかは誰にもわかりません。PHP からの直接ダウンロードを使用する例をいくつか見つけました。はいの場合、いくつかの例は?AMFPHP を使用してファイルをアップロードするルーチンがありますが、AMFPHP を使用してダウンロードする例がウェブ上に見つかりませんでした。

前もって感謝します。

4

2 に答える 2

0

この記事を見つけました: http://gertonscorner.wordpress.com/2009/03/15/fileupload-using-amfphp-remoteobject-and-flash-10/。それに基づいて、独自のバージョンを作成しました。これは、私のサービスが service-config.xml を介して amfphp のドキュメントのセクション Amfphp を使用した最初のプロジェクトで説明されている方法で定義されているためです。

サーバ側:

サービス クラスと値オブジェクト クラスの両方に到達するためにゲートウェイを構成する方法を既に知っている場合は、次の 2 つのクラスを使用します。

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 があります。これは、ファイルを配置するディレクトリです。このディレクトリ内のファイルの名前は、クライアントから取得したものになります。もちろん、これを変更する必要がありますが、現時点ではこの例の範囲外です。

クライアント側:

クライアント側では、Flex プロジェクトの src フォルダーに、値オブジェクト クラスを含むパッケージをビルドし、ActionScrip ファイルとして保存します。

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

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

    public function FileVO(){
    }

  }
}

ファイルのアップロードを伴うコンポーネント:

<?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>

私にとってはうまくいきます!少なくとも私の開発サーバーでは。ここでセキュリティホールに注意してください。悪用を防ぐために、何らかの形で保護する必要があります。

于 2014-01-31T23:01:16.447 に答える
0

ByteArray で試してください。return new Amfphp_Core_Amf_Types_ByteArray($data); のようなもの

于 2012-12-11T20:10:09.890 に答える