0

SWFUpload(http://swfupload.org)を試していますが、PHPでは、そのデータがまだ$_FILES配列にあるのではないかと思います。そうでない場合、それはどこに行きますか?

4

2 に答える 2

3

SWFUploaderは、HTTPPOSTを使用してファイルをアップロードします。したがって、PHPの観点からは、ファイルとともに投稿されるのと同じです。

ファイルは$_FILESにあり、追加のpostvarsは$_POSTにあります。

于 2009-06-20T02:13:47.997 に答える
1

swfuploadとPHPを使用した完全な例を投稿します。swfuploadドキュメントは初心者にはあまり役に立たないと思います。この例は、多くの人に役立ちます。ダウンロードする必要があるものは次のとおりです

最初に必要なすべてのファイルをコピー/作成します

  • v2.2.xyコアとサンプルをダウンロードする
  • 次に、次のフォルダ構造を作成します

swfuploadというフォルダーを作成し、2.2.xyコアから次のファイルをそのフォルダーにコピーします

  • swfupload.js(コアルートフォルダーから)
  • swfupload swfファイル(コア/フラッシュフォルダーから)

以下のファイルを2.2.xデモフォルダからswfuploadフォルダにコピーします

  • default.css(2.2.xysamples / demos / cssから)
  • 2.2.xy samples / demos / simpledemo / jsフォルダーをここにコピーします(そのまま)
  • 2.2.xyのsamples/demos / imagesフォルダーをここにコピーします(そのまま)

次に、swfuploadフォルダー内のファイル(receiver.phpと呼びます)を受け取るPHPスクリプトを作成します。これで、必要なすべてのファイルを含むドキュメントルート内にswfuploadというフォルダができました。

swfuploadコントロールを使用してテストHTMLページを作成する

 <!-- file upload component  -->
    <div class="fieldset flash" id="fsUploadProgress">
        <span class="legend">Upload Queue</span>
     </div>
     <div id="divStatus">No Files Uploaded</div>
      <div>
          <span id="spanButtonPlaceHolder"></span>
      <input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />
      </div>

swfuploadコントロールと対話するためのjavascriptを含める

ここで、テストhtml内にswfuploadcssファイルと必要なjavascriptファイルを含める必要があります。また、swfuploadコントロールと対話するために必要なjsを初期化して構成する必要があります。

<link href="/swfupload/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/swfupload/swfupload.js"></script>
<script type="text/javascript" src="/swfupload/js/swfupload.queue.js"></script>
<script type="text/javascript" src="/swfupload/js/fileprogress.js"></script>
<script type="text/javascript" src="/swfupload/js/handlers.js"></script>


<script type="text/javascript">
            //attach events
            $(document).ready(function(){
                $("a.removeMedia").live("click", function(event){
                    event.preventDefault();
                    var docId = $(this).attr("id");
                    //remove flexi data
                    webgloo.gMedia.table.removeRow(docId);
                }) ;

                //initialize gMedia table with documentId coming from server
                webgloo.gMedia.debug = false ;
                webgloo.gMedia.table.load();

            });

            //swffileupload related javascript
            var swfu;

            window.onload = function() {
                var settings = {
                    flash_url : "/swfupload/swfupload.swf",
                    upload_url: "/swfupload/receiver.php",
                    post_params: {"PHPSESSID" : "<?php echo session_id(); ?>"},
                    file_size_limit : "10 MB",
                    file_types : "*.*",
                    file_types_description : "All Files",
                    file_upload_limit : 100,
                    file_queue_limit : 0,
                    custom_settings : {
                        progressTarget : "fsUploadProgress",
                        cancelButtonId : "btnCancel"
                    },
                    debug: false,

                    // Button settings
                    button_image_url: "/swfupload/images/TestImageNoText_65x29.png",
                    button_width: "65",
                    button_height: "29",
                    button_placeholder_id: "spanButtonPlaceHolder",
                    button_text: '<span class="theFont">Upload</span>',
                    button_text_style: ".theFont { font-size: 16; }",
                    button_text_left_padding: 12,
                    button_text_top_padding: 3,

                    // The event handler functions are defined in handlers.js
                    file_queued_handler : fileQueued,
                    file_queue_error_handler : fileQueueError,
                    file_dialog_complete_handler : fileDialogComplete,
                    upload_start_handler : uploadStart,
                    upload_progress_handler : uploadProgress,
                    upload_error_handler : uploadError,
                    upload_success_handler : uploadSuccess,
                    upload_complete_handler : uploadComplete,
                    queue_complete_handler : queueComplete  // Queue plugin event
                };

                swfu = new SWFUpload(settings);
            };

        </script>

設定で行う必要のある変更を確認してください。これで、PHPスクリプトを実行する準備が整いました。PHPスクリプトを実行すると、PHPスクリプトは、テストhtmlが使用できる応答(docの場所、DBに格納している場合はdoc_id、name、size、mimeなど)などを返すことができます。

サーバー側処理用のPHPスクリプト

PHPでファイルを処理する方法を知っている場合、知っておく必要があるのは、swfuploadによって送信されるファイル要素名がFiledataであることだけです。残りはすべて詳細です。$ _FILESを介してファイルのアップロードを処理した後、レシーバースクリプトは、ドキュメントの詳細でhtmlを更新するために使用できるデータを返すことができます。swfuploadフォーラムに含まれているPHPアップロードサンプルは純粋なスパゲッティです。@オブジェクト指向モデルを見たい場合は、@次のファイルを見てください

http://code.google.com/p/localo/source/browse/job/web/swfupload/receiver.php http://code.google.com/p/localo/source/browse/lib/webgloo/common /Upload.php http://code.google.com/p/localo/source/browse/lib/webgloo/job/FileUpload.php

これは説明のみを目的としています。ライブラリに依存しているため、コードはそのままでは機能しません。

PHPスクリプトを配線すると、swfuploadコントロールを含むhtmlにデータが返されます。

これが最後のステップです。アップロードが成功したときにサーバースクリプトが返すものは、swfupload javascriptハンドラーの1つで処理して、htmlを更新する必要があります(たとえば、返されたファイルのアップロードURIをドキュメントに保存して、他のスクリプトにさらに送信するなど)。 /swfupload/js/handlers.jsを起動し、そこで変更を加えます。

function uploadSuccess(file, serverData) {
    // The php script may return an error message etc. but the handler event for swfupload
    // client is still uploadSuccess. we have to parse data returned from server to find known/script
    // error case.
    try {
        var progress = new FileProgress(file, this.customSettings.progressTarget);
        //try parsing server data now
        var dataObj ;

        try{
            if(webgloo.gMedia.debug) {
                alert("server returned => " + serverData);
            }

            dataObj = JSON.parse(serverData);
            //process server data
            if(dataObj.error === undefined || dataObj.error != 'yes'){
                //no error object or error is not yes!
                //process document object received from server
                webgloo.gMedia.table.addRow(dataObj.document.uuid, dataObj.document.originalName);
                progress.setComplete();
                progress.setStatus(dataObj.message);
                progress.toggleCancel(false);
            }else {
                //known error
                progress.setStatus("Error: " + dataObj.message);
            }

        } catch(ex) {
            //we need to gaurd against JSON parsing errors as well
            progress.setStatus("Error: " + ex.toString());
        }


    } catch (ex) {
        this.debug(ex);
    }
}

ここで独自のJavaScriptをホットワイヤできます。サンプル(ドキュメントのテーブルを更新し、返されたドキュメントのメタデータをフォームドキュメントにjson文字列として保存しています)については、次を参照してください。

http://code.google.com/p/localo/source/browse/job/web/js/main.js

これがswfuploadを使い始めるのに十分な情報であることを願っています。ハッピーコーディング:)

于 2011-08-02T05:37:46.100 に答える