0

آپلود و دانلود فایلها در پایگاه داده های mySql

 
amirpetrucci0261
amirpetrucci0261
کاربر طلایی1
تاریخ عضویت : تیر 1388 
تعداد پست ها : 27726
محل سکونت : http://zoomstar.ir/

آپلود و دانلود فایلها در پایگاه داده های mySql
پنج شنبه 11 آذر 1389  2:02 AM

آپلود کردن فایلها در پایگاه داده اگرچه معایبی مانند حجیم شدن دیتابیس و افزایش بار روی آن را داشته باشد اما از آنجایی که امنیت بالاتری داشته و بخصوص اینکه با گرفتن نسخه های پشتیبان از پایگاه داده ها به صورت خودکار از فایلها نیز پشتیبان گرفته میشود میتواند در برخی شرایط مناسب به نظر برسد.
در این مقاله خواهیم آموخت که چگونه میتوان فایلها را درون پایگاه داده mySql آپلود و دانلود نماییم.
ابتدا به بررسی آپلود فایلها میپردازیم . برای انجام چنین کاری ابتدا نیاز به جدولی ماند جدول زیر داریم :

CREATE TABLE `UploadedFiles` (
`UploadedFileID` int(11) NOT NULL auto_increment,
`name` varchar(30) default NULL,
`type` varchar(30) default NULL,
`size` int(11) default NULL,
`content` longblob,
PRIMARY KEY (`UploadedFileID`)
) TYPE=MyISAM;

اکنون برای آپلود فایلها از اسکریپت زیر استفاده مینماییم:

'holds db constructor
include("{$_SERVER['DOCUMENT_ROOT']}/phplibrary/dbconnect.php");
###################
//Consume Post Vars
###################
if (!empty($_POST['upload']))
{
//Loop thru Post Array
foreach($_POST as $key => $value) {
$$key = $value;
}
$connect->connect_db(mydatabase)

برای درج فایل میباید ابتدا چک کنیم که اندازه آن از 0 بیشتر باشد.(برای اطمینان از صحت فایل آپلود شده).

if(isset($_POST[’upload’]) && $_FILES[’SpecialFile’][’size’] > 0) {

سپس نام، اندازه ، نوع و محتوی آن را درون متغیرهای مورد نظر قرار میدهیم :

//Insert File
$fileName = $_FILES[’SpecialFile’][’name’];
$tmpName = $_FILES[’SpecialFile’][’tmp_name’];
$fileSize = $_FILES[’SpecialFile’][’size’];
$fileType = $_FILES[’SpecialFile’][’type’];
$fp= fopen($tmpName, ‘r’);
$content = addslashes($content);
fclose($fp);
}
if(!get_magic_quotes_gpc()) {
$fileName = addslashes($fileName);
}

اکنون کافی است تا با یک کوئری مقادیر را در پایگاه داده ها درج نماییم:

$query = “INSERT INTO UploadedFiles (name, size, type, content) “.
“VALUES (’$fileName’, ‘$fileSize’, ‘$fileType’, ‘$content’)”;
$result = mysql_query($query);
if (!$result) {
dberror (mysql_error(), $_SERVER[’PHP_SELF’] );
echo mysql_error();
}

از یاد مبرید که بسیار لازم است وضعیت فایل آپلود شده را به کاربر اعلام نماییم:

//Display Confirmation
$message = urlencode(”Your file has been uploaded.”);
header( “Location: confirmed.php?m=$message” );
exit;
}
?>

برای نوشتن کد دانلود فایل ترجیحا بهتر است آن را به صورت داده های باینری بخوانیم. در این حالت دیگر مرورگر تنها فایل را دانلود میکند و سعی نمیکند آن را به صورت خودسرانه باز کند !! (اگر محتوای فایل یک تصویر باشد به جای آنکه پنجره ذخیره سازی فایل بازشود، تصویر مربوطه در مرورگر نمایش خواهد یافت)

//holds db constructor
include("{$_SERVER['DOCUMENT_ROOT']}/phplibrary/dbconnect.php");
if (!empty($_POST['GetFile']))
{
$UploadedFileID = $_POST["UploadedFileID"];
$connect->connect_db(mydatabase)
$query = “SELECT * FROM UploadedFile WHERE UploadedFileID = $UploadedFileID”;
$result = mysql_query( $query );
if( !$result ) {
echo mysql_error();
exit;
}
$row = mysql_fetch_array( $result );
if (!empty($row[”content”]))
{
// Output the MIME header - Force as Octet Stream
// You could get this from the FileType Column
header(”Content-type: application/octet-stream”);
header(”Content-Length: ” . strlen($row[’content’]) );
header(”Content-Type: application/octet-stream”);
header(’Content-Disposition: attachment; filename=”‘.$row[’name’].’”‘);
header(”Content-Transfer-Encoding: binary\n”);
echo $row[’content’];
}
}
?>
- Select File -
$connect->connect_db(mydatabase)
$result = mysql_query(”SELECT UploadedFileID, name FROM UploadedFiles”);
if ($myrow = mysql_fetch_array($result)) {
do { ?>

تشکرات از این پست
دسترسی سریع به انجمن ها