2012-08-23 78 views
0

我有一個簡單的形式:如何在php和ajax中獲取上傳的圖像路徑?

<input type="hidden" name="MAX_FILE_SIZE" value="2097152" id="MAX_FILE_SIZE"> 
<input type="file" name="file_upload" id="file_upload" class="picture_main"> 
<input type="submit" name="upload_picture" id="upload_picture" value="Submit"> 

我試圖以一個Ajax上傳:

submit.on("click", function(){ 
     var file = $('#file_upload').val(); 
     uploadImageAjax(file); 
     return false; 
}); 

var uploadmageAjax = function(file) 
{ 
    $.ajax({ 
     type: "POST", 
     url: "/test/index/imageupload", 
     data: { 
      'file': file 
     }, 
     dataType: "json", 
     success: function (data) { 
      console.log(data); 
     } 
    }); 
} 

什麼,我得到的回覆是,例如,file: "C:\fakepath\weirdan003-10.jpeg"

但林不知道是什麼那fakepath是!?

,如果我是這樣做在PHP中只有我會得到這樣的形象:

if (isset($_POST['upload_picture'])) { 
      $data = $formImageUpload->getValues(); 
      $pictureName = $data['picture']; 
.... 

,然後上傳。

所以我想弄明白的是,如果ajax調用POST的那個動作正確的文件,所以我可以上傳到磁盤。

$('#file_upload').val();持有$ _FILE ??

有什麼想法?

謝謝

回答

2
var file = $('#file_upload').val(); 

這將只返回客戶機上文件的路徑。爲了安全起見,它會像c:\ fakepath \ file_name.ext一樣返回。如果我沒有記錯的話,在一些較舊的瀏覽器中可以得到一條真正的路徑。但是,它仍然不能幫助您在服務器上獲取文件。

對於AJAX風格上傳,你可以使用一些你推薦的插件。或者只是使用jQuery Forms插件。它的工作方式與$.ajax非常相似。

現在,當文件被正確上傳,你會發現它在$_FILES

在你的情況下,所有需要的信息也將會像$_FILES['file_upload']其中「file_upload」是你的文件輸入的名稱。

現在您可以使用move_uploaded_file將其從臨時存儲中移出。並做任何你想要的文件

編輯: 而我看到你正在使用Zend。看看this關於如何使用服務器端的FileUpload元素。使用Zend,你可以使用FileUpload方法而不是move_uploaded_file