سلام .
من با استفاده از دانلود امن و
response()->download(storage_path($path))
استفاده میکنم . همه چی تو لوکال خوبه و اوکیه
ولی تو سرور که centos۷ هست کار نمیکنه . تو فایرفاکس میگه file not found تو کروم هم میگه
This site can’t be reached ERR_INVALID_RESPONSE
کسی میدونه مشکل از چی میتونه باشه ؟
فایل موجوده . ادرس هم درسته . تو لوکال هم کاملا درست کار میکنه .
سلام متاسفانه هیچ کدوم از راهکار ها توی سرور ما جواب نداد. سرورمون centos7 بود
در نهایت مجبور شدم از force download خود پی اچ پی استفاده کنم که جواب داد.
کدش رو اینجا میزارم هر کی بعدا به این مشکل خورد میتونه از این روش استفاده کنه .
header("Content-disposition: " . 'attachment; filename="__YOUR_FILE_NAME"');
header("Content-type: " . File::mimeType(storage_path(YOUR_PATH)) );
readfile(storage_path(YOUR_PATH) );
ممنون از همه دوستان که جواب دادند .
سلام @reza159753
مطمئن بشید که دستور php artisan storage:link رو در سرور وارد کرده باشید.
سلام ممنون از پاسختون .
@mirmahna.s
ولی نه توی اموزش ها نه اینکه تو لوکال نیازی نبود این کارو بکنیم . و بدون اینا داشت درست کار میکرد .
آیا حتما باید این کارو کرد؟
سلام مجدد . تو لوکال هم از پوشه storage هم از پابلیک میتونم با استفاده از response()->download دانلود کنم
اما تو سرور که تو centos 7 هست نمیتونم .
SELINUX رو بستم بازم جوابی حاصل نشد
من فک میکردم مشکل از پوشه استورج هست اما هر فایلی رو از هر جایی میخوام force download کنم نمیشه تو سرور این کار رو کرد .
آیا تو اپاچی باید تغییراتی بدم ؟
کد:
$headers = array('Content-Type' => File::mimeType(public_path('/books/B_'.$book->id)) );
return response()->download(public_path('/books/B_'.$book->id , $headers));
دوستان لطفا اگه میشه راهنمایی کنید خیلی فوریه .
درود
دوستمون هم اشاره کردند. اگر از php artisan storage:link استفاده نکردید .. این گزینه اول هست
چنانچه اطلاعات کاملتری راجب استفاده از Storage و نحوه عملکردش نیاز داشتید.... من چند وقت پیش یه مقاله در این باره نوشتم، لینکشو براتون میگذارم.
کار کردن با فایلها در فریمورک لاراول
موفق باشید
سلام
منم فکر میکرد مشکل همینه ولی ربطی به استوریج نداره . من حتی فایل های تو پابلیک رو هم نمیتونم دانلود کنم
@ali.bayat
سلام کد خاصی نیست .
@ali.bayat
یه خط کد که متن رو داخل فایل میزاره و ذخیره میکنه .
و دو خط بالایی
File::put(public_path("/books/B_" . $content->book_id), $content->content);
$headers = array('Content-Type' => File::mimeType(public_path('/books/B_'.$book->id)) );
return response()->download(public_path('/books/B_'.$book->id , $headers));
قبلش هم شروطی که لینک رو برسی میکنه که تا خط سوم کد اجرا میشه (خط سوم همین کد ها) خط سوم میترکه.
سلام
@reza159753
اگر میگید توی Public هم باشه نمیتونم دانلود کنم
پس
تنظیمات وب سرور و سطح دسترسی فایل ها باید چک بشه
دو نکته در کد شما دیده میشه.. احتمالا اگر اصلاح کنید مشکل حل بشه
۱ : متد download به شکل زیر باید استفاده بشه:
return response()->download($pathToFile, $name, $headers);
۲ : به هلپر Public_path در خط سوم دقت کنید.. پرانتزهای این متد در جاهای صحیحی نیستند..
کدتون کم و بیش باید شبیه زیر باشه:
$file_path = public_path("/books/B_" . $content->book_id);
File::put($file_path, $content->content);
$headers = array('Content-Type' => File::mimeType($file_path) );
return response()->download($file_path, $book->id , $headers));
سلام
@reza159753
مواردی رو که جناب بیات گفتند رو تست بگیرید
کد htaccess در سرور رو هم بزارید تا بررسیش کنیم.
سلام متاسفانه هیچ کدوم از راهکار ها توی سرور ما جواب نداد. سرورمون centos7 بود
در نهایت مجبور شدم از force download خود پی اچ پی استفاده کنم که جواب داد.
کدش رو اینجا میزارم هر کی بعدا به این مشکل خورد میتونه از این روش استفاده کنه .
header("Content-disposition: " . 'attachment; filename="__YOUR_FILE_NAME"');
header("Content-type: " . File::mimeType(storage_path(YOUR_PATH)) );
readfile(storage_path(YOUR_PATH) );
ممنون از همه دوستان که جواب دادند .
میتونستید از پکیج زیر استفاده کنید
https://github.com/shetabit/chunky
از کدی که خودتون نوشتین خیلی بهینه تر هست. میتونید به صورت زیر فایل رو استریم کنید (بفرستید برای دانلود)ّ
namespace App\Http\Controllers;
use App\Models\File;
use Shetabit\Chunky\Classes\StreamOut;
class StreamOutController extends Controller
{
/**
* Stream file output
*
* @param File $file
*/
public function __invoke(File $file)
{
// procceed until all file has sent to client
ini_set('max_execution_time', '0');
// retrieve file's path
$path = '../'.$file->path;
// prepare stream
$stream = new StreamOut($path);
// run stream
$stream->process();
}
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟