2011-04-23 19 views
1

好的,所以有一點小小的前言:我一直在將拖放文件上傳到名爲Moodle(特別是2.0.1)的課程管理系統。此版本的Moodle使用YUI3框架,並通過io-upload-iframe上載帶有要上傳文件的表單數據和另存爲名稱。該文件存儲在超級全局$ _FILES中,直到文件系統被髮送到永久存儲它的相關數據。

我遇到的麻煩是,而不是使用YUI3的拖放功能(從粗略看他們的網站是不是我需要的拖放類型)我使用本機HTML5拖動並刪除代碼。這似乎適用於大多數主流瀏覽器(我沒有足夠的時間進行測試,並且超出了本項目的範圍)。我遇到的麻煩是這種DND設計會立即爲您提供來自JavaScript中Event對象的文件。我可以將此文件對象發送到任何我想要的位置,但文件系統僅用於處理臨時存儲在$ _FILES變量中的變量。不幸的是,我一直無法找到任何簡單的方法讓這個文件存儲在那裏。我可以對各種形式的HTTP請求(YUI3的特殊Y.io()請求或XHR之一)進行HTTP請求,但這需要來自原始源代碼的大量重複代碼。

有人有什麼建議嗎?

回答

0

很難說你的問題是什麼。但無論您的服務器或文件系統是什麼,它與$ _FILES數組的臨時性無關。

當您收到DND事件並且YUI隨後發送文件時,您將收到$ _FILES或$ _POST中的一些數據。如果是這樣,只需使用move_uploaded_filefile_put_contents並將其存儲在其他地方

將移動的文件分配爲md5()散列作爲名稱,並將其作爲您的AJAX-DND上載請求的文件標識符返回。

然後,您可以在您的Javascript代碼中使用該哈希ID,並通過此引用來引用已上傳的圖像文件。如果您的應用程序在拖放後啓動常規表單請求,那麼您只需包含收集的圖像參考ID。因此你的服務器端代碼可以再次關聯它。

,如果你想你甚至可以重建$ _FILES數組:

foreach ((array)$_POST["prev_image_ids"] as $md5) { 
    $md5 = basename($md5); 
    $_FILES["image"][] = array(
     "tmp_name" => $fn="./already-uploaded/$md5", 
     "size" => filesize($fn), "type"=>"image/whatever", 
     "name" => "unknown.jpg", "error"=>UPLOAD_ERR_OK, 
    ); // you could store away those original attributes too 
} 
+0

對不起,我可能不是在所有的清楚,我遇到的問題是「和YUI隨後將文件「一點。通過設計文件上傳通常是通過表單中的文件輸入來完成的,該表單是POST的,我需要在沒有表單的情況下複製它,因爲DND事件爲ME提供文件而不是存儲它。 – Clint 2011-04-23 15:29:10

+0

當您收到該文件對象時,則不需要表單。瀏覽一些關於免打擾的文章,你可以使用['.getAsDataURL()'](http://dev.w3.org/2006/webapi/FileAPI/#readAsDataURL)方法,然後用它來製作一個AJAX請求。 - 我不能相信有沒有已經處理的YUI插件。 – mario 2011-04-23 15:50:00

+0

http://stackoverflow.com/questions/2117845/html-5-file-api並瀏覽http://hacks.mozilla.org/2009/12/file-drag-and-drop-in-firefox-3 -6 /更多教程 – mario 2011-04-23 15:53:18

相關問題