PDA

View Full Version : دانلود فایل



googoli
دوشنبه 04 خرداد 1394, 16:51 عصر
سلام
من برای دانلود فایل از کد زیر استفاده می کنم


$explode = explode('/', $model->file);
$filename = end($explode);
$path = Yii::app()->baseUrl.$model->file ;

Yii::app()->getRequest()->sendFile($filename , @file_get_contents($path));

دانلود رو انجام میده ولی وقتی فایل رو باز می کنم درون فایل هیچی نمایش داده نمیشه
میشه من ر و راهنمایی کنید .

under22
دوشنبه 04 خرداد 1394, 18:06 عصر
سلام
من برای دانلود فایل از کد زیر استفاده می کنم


$explode = explode('/', $model->file);
$filename = end($explode);
$path = Yii::app()->baseUrl.$model->file ;

Yii::app()->getRequest()->sendFile($filename , @file_get_contents($path));

دانلود رو انجام میده ولی وقتی فایل رو باز می کنم درون فایل هیچی نمایش داده نمیشه
میشه من ر و راهنمایی کنید .
دوست عزیز شما نباید آدرس فایل رو به صورت url بدید باید آدرس حقیق فایل رو بدید مثل این /var/www/html/test.zip

desatir7316
دوشنبه 04 خرداد 1394, 18:57 عصر
یه مکان ثابت برای فایل هاتون در نظر بگیرید، توی دیتابیس هم فقط اسم فایلهارو با پسوند ذخیره کنید
بعد اسم فایل رو که از دیتابیس خوندی، به آخر اون آدرس ثابت اضافش کن و دانلود کن

googoli
دوشنبه 04 خرداد 1394, 23:13 عصر
یه مکان ثابت برای فایل هاتون در نظر بگیرید، توی دیتابیس هم فقط اسم فایلهارو با پسوند ذخیره کنید
بعد اسم فایل رو که از دیتابیس خوندی، به آخر اون آدرس ثابت اضافش کن و دانلود کن

من هم تقریبا همین کار رو کردم یه مکان ثابت دارم در پوشه images و $path هم دارم همون ادرس رو میدم

googoli
دوشنبه 04 خرداد 1394, 23:15 عصر
دوست عزیز شما نباید آدرس فایل رو به صورت url بدید باید آدرس حقیق فایل رو بدید مثل این /var/www/html/test.zip
منظورتون اینه که از basepath به جای baseurl استفاده کنم ؟

desatir7316
سه شنبه 05 خرداد 1394, 07:17 صبح
برای ذخیره از basePath استفاده کنید و آدرس جایی رو که می خوایید ذخیره بشه :

Yii::$app->basePath . '/rest/of/the/path/filename';

و برای خوندن هم از baseUrl :

Yii::$app->urlManager->baseUrl . '/rest/of/the/url/filename';

googoli
سه شنبه 05 خرداد 1394, 16:29 عصر
برای ذخیره از basePath استفاده کنید و آدرس جایی رو که می خوایید ذخیره بشه :

Yii::$app->basePath . '/rest/of/the/path/filename';

و برای خوندن هم از baseUrl :

Yii::$app->urlManager->baseUrl . '/rest/of/the/url/filename';

خب من هم دارم طبق گفته شما عمل می کنم این خط ادرس دهی من


$path = Yii::app()->baseUrl.$model->file ;


این هم نتیجه ادرس من
/panel/images/Artical/php.docx

desatir7316
سه شنبه 05 خرداد 1394, 21:25 عصر
ارورش چیه؟

under22
سه شنبه 05 خرداد 1394, 21:35 عصر
خب من هم دارم طبق گفته شما عمل می کنم این خط ادرس دهی من


$path = Yii::app()->baseUrl.$model->file ;


این هم نتیجه ادرس من
/panel/images/Artical/php.docx
دوست عزیز بهتون گفتم برای دانلود فایل باید از آدرس استفاده کنید نه Url

desatir7316
چهارشنبه 06 خرداد 1394, 09:06 صبح
شاید این نمونه کد کمکتون کنه:

کنترلر(اکشن دانلود):


public function actionDownloadFile($id){
$file_name = \yii\helpers\Url::base() . '/assets/files/' . \common\models\Download::findOne((int)$id)->filename;
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($_SERVER['DOCUMENT_ROOT'] . $file_name)).' GMT');
header('Cache-Control: private', false);
header('Content-Disposition: attachment; filename="'.basename($_SERVER['DOCUMENT_ROOT'] . $file_name).'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($_SERVER['DOCUMENT_ROOT'] . $file_name)); // provide file size
header('Connection: close');
readfile($_SERVER['DOCUMENT_ROOT'] . $file_name); // push it out
exit();
}


ویو:


<a href="<?= Url::to(['page/download-file', 'id' => $model->id])?>">دانلود</a>


کنترلر(اکشن آپلود):


public function actionCreate()
{
$model = new Download();

if ($model->load(Yii::$app->request->post())) {
$model->file = \yii\web\UploadedFile::getInstance($model, 'file');
if($model->validate()){
$model->filename = time() . '_' . rand(0,9999) . '.' . $model->file->extension;
$model->file->saveAs(\Yii::$app->basePath . '/../assets/files/' . $model->filename);
$model->save();
return $this->redirect(['index']);
}else{
return $this->render('create', [
'model' => $model,
]);
}
} else {
return $this->render('create', [
'model' => $model,
]);
}
}

desatir7316
چهارشنبه 06 خرداد 1394, 09:07 صبح
چرا پست رو نمی تونم حذف کنم؟
این پست اضافه است...