2013-07-25 65 views
4

我有一個表單生成器,我想添加拖放文件功能。發送拖放文件到輸入類型文件元素

我被卡住的地方在於所有我遇到的資源在丟失時通過xhr上傳圖片。我希望圖像一直存在,直到表單被提交。

理想情況下,event.dataTransfer.files[0]對象將被轉移到<input type="file" ...value="[dropped-file]">元素。

目前我無法做到這一點。他們使用兼容的數據類型嗎?

+0

爲什麼使用XHR會出現問題?只需在提交表格後發送請求,或者通過ajax提交整個表格和/或文件。請閱讀[FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData)瞭解更多信息。 –

+0

我的理解是,FormData不適用於較老的(8-9)IE。我錯了嗎? – emachine

+0

這是真的(FormData在這些瀏覽器中不存在),但無關緊要,因爲無論如何您都無法通過拖放在這些瀏覽器中上傳文件。 –

回答

3

您可以在發生拖放事件後創建併發送表單,然後用戶單擊conf按鈕。下面是它的要點:(未測試)。

function uploadFile(file) { 
    var form = new FormData(), 
     xhr = new XMLHttpRequest(); 

    form.append('media', file); 
    xhr.open('POST', '/myurl/'); 

    xhr.onprogress = function(e) { 
     showProgress(); 
    } 

    xhr.onload = function(e) { 
     showSuccessConf(); 
    } 

    xhr.send(form); 
} 

uploadFile(event.dataTransfer.files[0]); 
+0

希望通過普通的$ _POST發送它,但我可能不得不切換到xhr選項。謝謝回覆。 – emachine

+0

這將發送POST請求。就您的服務器而言,表單提交和通過POST使用XHR發送的FormData對象之間沒有區別。 –

+1

這並沒有真正回答這個問題。我希望能夠通過通常的文件輸入或通過拖放到自定義區域來上傳文件。在任何情況下,表單都有幾個輸入字段,文件輸入只是其中的一個,所以我想以傳統方式提交整個表單:使用簡單的表單提交。 – Ariel

相關問題