2012-03-20 38 views
2

發送,當我在做一拖通過閱讀一堆教程式的上傳腳本,但他們只覆蓋JavaScript部分,我有對PHP的一部分問題。如何保存圖像服務器端JavaScript中

我上傳的圖像,因爲這:

$('#drop-zone').bind('drop', drop); 

function drop(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
    e.dataTransfer = e.originalEvent.dataTransfer; 
    traverseFiles(e.dataTransfer.files); 
} 

traverseFiles使foreach循環每個文件並調用上傳funcion,還有我這樣做:

xhr = new XMLHttpRequest(); 

//some event listners for processing, on load 

xhr.open("post", "core/plugins/upload/upload.class.php", true); 

xhr.setRequestHeader("Content-Type", "multipart/form-data"); 
xhr.setRequestHeader("X-File-Name", file.name); 
xhr.setRequestHeader("X-File-Size", file.size); 
xhr.setRequestHeader("X-File-Type", file.type); 

xhr.send(file); 

然後在PHP中,我發現使用這將得到我原始數據的圖像

$file = file_get_contents('php://input'); 

編輯:找到解決方案

$fh = fopen($savedir, 'w') or die("can't open file"); 
fwrite($fh, $file); 
fclose($fh); 
+0

順便說一下,$ _ POST和$ _FILES都是空的,當我用這個 – MakuraYami 2012-03-20 11:33:22

回答

3

假設你已經設法從PHP輸入的原始文件,很可能會被base64編碼。一個簡單的例子就可以做到這一點:

<?php 
//decode file 
$image = base64_decode($file); 

// write it 
$filename = "myfile.png"; 
$fh = fopen($filename, 'w') or die("can't open file"); 
fwrite($fh, $image); 
fclose($fh); 

編輯 看評論,該文件並沒有編碼爲請求的結果。

+0

謝謝生病看看你的答案,看看它是怎麼回事 – MakuraYami 2012-03-20 12:24:24

+1

它沒有編碼,當我使用fwrite而不是move_uploaded_file它可以工作,謝謝你的解決方案。 – MakuraYami 2012-03-20 12:28:52

1

move_uploaded_file是不是你想要的。如果您使用普通的POST請求(而不是通過Ajax)發送了該文件,那麼當您使用move_uploaded_file時。

$file包含圖像的原始二進制數據。你所要做的就是將這些數據寫入一個文件(注意正確處理換行符),並且你很好。從fopen開始,看看你有多遠。

我假設$file已成功地填充與二進制數據和你測試這一點。如果沒有,那麼你在javascript方面又遇到了另一個問題。

編輯:您還可以找到this幫助。

+0

沒有一個直接的解決方案,但仍然是一個不錯的awnser我可以使用該職位爲例努力改善我的代碼。謝謝! – MakuraYami 2012-03-20 12:29:29

相關問題