0

我正在尝试使用 SWFUpload ( http://swfupload.org ),我想知道在 PHP 中,它的数据是否仍然在 $_FILES 数组中。如果没有,它会去哪里?

4

2 回答 2

3

SWFUploader 使用 HTTP POST 上传文件。因此,从 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 文件(来自 core/Flash 文件夹)

将以下文件从 2.2.x demos 文件夹复制到我们的 swfupload 文件夹中

  • default.css(来自 2.2.xy 示例/演示/css)
  • 在此处复制 2.2.xy samples/demos/simpledemo/js 文件夹(原样)
  • 在此处复制 2.2.xy samples/demos/images 文件夹(原样)

现在创建一个 PHP 脚本来接收 swfupload 文件夹中的文件(称为 receiver.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 中包含 swfupload css 文件和所需的 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 位置,或者 doc_id,如果您存储在数据库中,名称,大小,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 处理程序之一处理以更新 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 回答