2013-12-15 112 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

相关问题