2013-12-15 114 views
0

我想將網站用戶上傳的文件保存到我的數據庫中。我已經做了使用longblob(二進制),但我有興趣保存上傳文件的路徑,而不是。使用PHP在SQL數據庫中存儲文件的路徑

這是我的代碼,我應該執行哪些修改?

<?php require_once('Connections/databasestudents.php'); ?> 
<?php 

$fileName = $_FILES['file']['name']; 
$tmpName = $_FILES['file']['tmp_name']; 
$fileSize = $_FILES['file']['size']; 
$fileType = $_FILES['file']['type']; 

$fp  = fopen($tmpName, 'r'); 
$content = fread($fp, filesize($tmpName)); 
$content = addslashes($content); 

$studentId = $_POST['studentId']; 
fclose($fp); 

$query = "INSERT INTO file (studentId, fileName, fileType, fileContent) ". 
"VALUES ('$studentId', '$fileName', '$fileType', '$content')"; 

mysql_select_db($database_databasestudents, $databasestudents); 
mysql_query($query) or die('Error, query failed'); 

header("Location: students.php"); 
die(); 

?> 

回答

0

只是兩件事情:

  1. 取而代之的讀取上傳文件的內容

    您應該將臨時文件複製到其最終位置。詳細討論here
  2. 除了插入文件的內容,您應該存儲文件名或複製臨時文件的路徑。

這裏最大的挑戰可能是如何處理文件名衝突(上傳兩個同名文件時會發生什麼)。你如何處理這種情況完全取決於應用。當所有文件都應該被存儲時,即使它們的文件名與以前上傳過的文件名相同,你也可以隨時在文件名中添加一個格式化的時間戳,或者添加一些使其獨一無二的數據(我已經使用了日期和PID之前)

0

這不是代碼準備好生產。

鑑於此,基本上您需要的是使用move_uploaded_file上載文件。只是使用您的代碼的基本片段是:

require_once('Connections/databasestudents.php'); 

if($_FILES) 
{ 
    $fileName = $_FILES['file']['name']; 
    $tmpName = $_FILES['file']['tmp_name']; 
    $fileSize = $_FILES['file']['size']; 
    $fileType = $_FILES['file']['type']; 

    // $fp  = fopen($tmpName, 'r'); 
    // $content = fread($fp, filesize($tmpName)); 
    // $content = addslashes($content); 

    if(move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name'])) 
    { 
     $studentId = $_POST['studentId']; 
     // fclose($fp); 

     $query = "INSERT INTO file (studentId, fileName, fileType, fileContent) ". 
     "VALUES ('$studentId', '$fileName', '$fileType', '$content')"; 

     mysql_select_db($database_databasestudents, $databasestudents); 
     mysql_query($query) or die('Error, query failed'); 

     header("Location: students.php"); 
     die(); 
    } 
} 
+0

謝謝,所以在數據庫中,我發現新的上傳文件在正確的ID下。文件名被正確保存。但是文件內容是空的,文件類型被填充(image/png)。 此外,當我嘗試檢索(下載)上傳的文件時,它顯示文件已損壞。似乎有什麼錯誤的上傳過程..任何想法爲什麼? – HaneenSu

+0

'if($ _ FILES)'後面插入'var_dump($ _ FILES);'。這將返回一個數組,其中包含文件數據,文件大小,錯誤等.'type'是您上傳文件的MIME類型,因此image/png – ilpaijin

+0

,但文件內容爲零..?我應該爲數據庫中的文件路徑創建一個新字段嗎?我看不到存儲的任何路徑。 對不起,但我是PHP和SQL的新手 – HaneenSu

相關問題