我正在尝试使用SWFUpload(http://swfupload.org),我想知道在PHP中,它的数据是否仍然在$ _FILES数组中。如果没有,它会去哪里?
答案 0 :(得分:3)
SWFUploader使用HTTP POST上传文件。因此,从PHP的角度来看,它与发布文件没有什么不同。
该文件将在$ _FILES中,额外的postvars将在$ _POST中。
答案 1 :(得分:1)
我将使用swfupload和PHP发布一个完整的示例。我相信swfupload文档对初学者没什么帮助,这个例子可以帮助很多人。你需要下载的是
创建一个名为swfupload的文件夹,并将2.2.x.y核心中的以下文件复制到其中
将以下文件从2.2.x demos文件夹复制到我们的swfupload文件夹
现在创建一个PHP脚本来接收swfupload文件夹中的文件(称为receiver.php)。现在,在文档根目录中有一个名为swfupload的文件夹,其中包含所有必需的文件。
<!-- 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>
现在你必须在我们的测试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位置之类的内容,或者如果存储在DB中的doc_id,名称,大小,mime等)可以返回。
如果您知道如何在PHP中处理文件,那么您唯一需要知道的是swfupload发送的文件元素名称是Filedata。休息都是细节。通过$ _FILES处理文件上传后,您的接收器脚本可以返回一些数据,这些数据可用于使用文档详细信息更新您的html。 swfupload论坛中包含的PHP上传示例是纯意大利面。如果你想看一个面向对象的模型,看看@ follow files
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
这仅用于说明目的。代码将无法正常工作,因为它依赖于我的库。
这是最后一步。服务器脚本成功上传后返回的内容应由swfupload javascript处理程序之一处理以更新html(比如在文档中存储返回的文件上传URI以进一步将其提交给其他脚本等)。您可以进行布线的方式是打开的up /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。快乐的编码:)