2013-05-15 44 views
0

我想使用php腳本在html中上傳文件。使用php腳本上傳文件而不離開該頁面

<html> 
<body> 
    <form id='importPfForm' enctype="multipart/form-data" action="http://localhost/js/upload.php" method="post"> 
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000" /> 
    Choose a file to upload: <input name="uploaded_file" type="file" /> 
    <input type="submit" value="Upload" /> 
    </form> 
</body> 
</html> 

和 「upload.php的」 包含以下代碼:

<?php 
$upload_key = 'uploaded_file'; 
if (isset($_FILES[$upload_key])) { 
    try { 
     $error = $_FILES[$upload_key]['error']; 
     switch ($error) { 
      case UPLOAD_ERR_INI_SIZE: 
       throw new Exception('Exceeded upload_max_filesize'); 
      case UPLOAD_ERR_FORM_SIZE: 
       throw new Exception('Exceeded MAX_FILE_SIZE'); 
      case UPLOAD_ERR_PARTIAL: 
       throw new Exception('Incomplete file uploaded'); 
      case UPLOAD_ERR_NO_FILE: 
       throw new Exception('No file uploaded'); 
      case UPLOAD_ERR_NO_TMP_DIR: 
       throw new Exception('No tmp directory'); 
      case UPLOAD_ERR_CANT_WRITE: 
       throw new Exception('Can\'t write data'); 
      case UPLOAD_ERR_EXTENSION: 
       throw new Exception('Extension error'); 
     } 
     $finfo = new finfo(FILEINFO_MIME); 
     $name  = $_FILES[$upload_key]['name']; 
     $tmp_name = $_FILES[$upload_key]['tmp_name']; 
     $size  = $_FILES[$upload_key]['size']; 
     if ($size > 350000) 
      throw new Exception('Exceeded 350KB limit'); 
     if (!is_uploaded_file($tmp_name)) 
      throw new Exception('Not an uploaded file'); 
     $type = $finfo->file($tmp_name); 
     if ($type === false) 
      throw new Exception('Failed to get MimeType'); 
     if ($type !== 'text/plain; charset=us-ascii') 
      throw new Exception('Only csv available'); 
     $new_name = dirname(__FILE__).'/upload/'.$name; 
    echo $new_name; 
     if (is_file($new_name)) 
      throw new Exception("The file {$new_name} already exists"); 
     if (!move_uploaded_file($tmp_name,$new_name)) 
      throw new Exception('Failed to move uploaded file'); 
     echo "File successfully uploaded as {$new_name}"; 
    } catch (Exception $e) { 
     echo 'Error: '.$e->getMessage(); 
    } 
} 
?> 

但這種方法會打開一個新的網頁。我想在不離開網頁的情況下執行該功能,並且我需要在html頁面中使用變量$new_name。我需要在我的html頁面中執行哪些修改?我很確定這是通過某種ajax請求的東西。但我不知道我在說什麼。我對ajax或javascript沒什麼大不過,但這是一個我經常使用的函數,我想知道它是如何工作的,所以我可以在需要現在和未來時實現它。

+0

值添加隱藏'iframe'您頁面,設置你的表單來發布到它('target'屬性),並讓你的php腳本返回一個html頁面,其中一小段javascript告訴父頁面上傳成功/失敗 – yent

+0

或者只是使用http:// blueimp .github.io/jQuery-File-Upload/- 非常重要洪水。 – tmaximini

+0

@Dinoop你有沒有對Ajax做過一些研究,以及它是如何工作的?我不想傷害你,雖然你說你「不知道在說什麼」。順便說一句。即使它沒有錯,您不需要在action屬性中定義'http:// localhost',只需要將數據提交到外部站點即可。 – reporter

回答

1

這裏真的有兩種選擇。你可以使用下面的代碼作爲表單的動作,然後把php放在同一個文件中。

<?php echo $_SERVER['PHP_SELF']; ?> 

或者

header("Location: upload.html?new_name=value_of_new_name"); 

在upload.php的地方它的成功,那麼在upload.html你可以使用$_GET['new_name']檢索的$new_name

+1

<?php echo $ _SERVER ['PHP_SELF']; ?>開放給XSS攻擊...避免。 –

+0

我該如何使用這種方法?它不工作.. –

相關問題