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);
 }
Другие вопросы по тегам