Laravel: Обновить ответ ()-> файл
В Laravel я использую этот маршрут
Route::get('admin/showBill/{file}','Admin\FileController@showBill');
и этот код
class FileController extends AuthController
{
public function showBill($file)
{
$path = storage_path('app/bills/' . basename($file) );
if(!\File::exists($path)) return back();
return response()->file($path);
}
для отображения PDF из моей папки хранения.
Так что, если у меня есть PDF bill-1.pdf
в моем /storage/app/bills/
папку, то я могу просмотреть его с помощью URL
example-domain.com/admin/showBill/bill-1.pdf
Проблема в том, что если я открою этот PDF-файл в браузере, заменим его и обновлю (F5) страницу, то отобразится старый счет. Я думаю, потому что он хранится в кэше. Могу ли я заставить Laravel показать новый замененный файл?
Я старался
public function showBill($file)
{
$path = storage_path('app/bills/' . basename($file) );
if(!\File::exists($path)) return back();
$path .= '?v='. time();
return response()->file($path);
}
Но затем Laravel говорит мне, что этот файл не существует. Я ищу решение, где я не должен переименовывать PDF-файл.
1 ответ
Вы уверены, что заменяете нужный файл?
Если так, поместите это dd()
, Я создал конечную точку, ответил пустой файл PDF - просмотрел его - заменил его наполненным контентом файлом PDF, и он прекрасно работает, когда я заменяю его.
Изменить: Кроме того, вы должны проверить переменную $file, используя либо запрос формы, либо проверку в контроллере.
public function showBill($file)
{
$path = storage_path('app/bills/' . basename($file));
if(!\File::exists($path)) {
dd("Quite possibly the problem is here, on the redirect back");
}
return response()->file($path);
}