簡體   English   中英

從數據庫中檢索文件時文件已損壞

[英]Files are corrupted when they are retrieved from database

在我的網站上,我希望允許用戶上傳文件(它們將存儲在數據庫中),然后允許他們下載文件。 上載過程已完成,沒有錯誤,並且將它們保存為二進制文件。

下載過程也可以,但是下載的文件已損壞! 知道為什么嗎?

上傳代碼:

<?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();

?>

下載代碼:

<?php require_once('Connections/databasestudents.php'); ?>
<?php
mysql_select_db($database_databasestudents, $databasestudents);
$query = 'SELECT fileName, fileContent, fileType, LENGTH(fileContent) as fileSize from file WHERE id="'. $_GET ['id'].'";';

$Recordset1 = mysql_query($query, $databasestudents) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);

$result = mysql_query($query);
$row = mysql_fetch_array($result, MYSQL_BOTH);
$size = $row['fileSize'];
$type = $row['fileType'];
$name =$row['fileName'];
$fileContent = $row['fileContent'];
echo $size . "". $type . " ". $name;

header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
echo $fileContent;

mysql_close();
?>
  1. 使用PDO和准備好的語句。 這可能可以解決該問題,並且可以解決下載代碼中的SQL注入漏洞(當前,該漏洞使人們可以入侵您的數據庫)。

  2. PDO具有“大對象”(LOB)支持,可用於您的工作。 它會比您目前正在執行的工作效率更高。 文檔提供了出色的示例代碼,它們或多或少地完全滿足您的要求。

我已經弄清楚了.. jus從下載代碼中刪除了這一行:

echo $size . "". $type . " ". $name;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM