code: public function setDownloadHeaders($attachmentName, $mimeType = null, $inline = false, $contentLength = null)
      {
          $headers = $this->getHeaders();
  
          $disposition = $inline ? 'inline' : 'attachment';
          $headers->setDefault('Pragma', 'public')
              ->setDefault('Accept-Ranges', 'bytes')
              ->setDefault('Expires', '0')
              ->setDefault('Cache-Control', 'must-revalidate, post-check=0, pre-check=0')
              ->setDefault('Content-Disposition', $this->getDispositionHeaderValue($disposition, $attachmentName));
  
          if ($mimeType !== null) {
              $headers->setDefault('Content-Type', $mimeType);
          }
  
          if ($contentLength !== null) {
              $headers->setDefault('Content-Length', $contentLength);
          }
  
          return $this;
      }
docs: Sets a default set of HTTP headers for file downloading purpose.
  @param string $attachmentName the attachment file name
  @param string $mimeType the MIME type for the response. If null, `Content-Type` header will NOT be set.
  @param bool $inline whether the browser should open the file within the browser window. Defaults to false,
  meaning a download dialog will pop up.
  @param int $contentLength the byte length of the file being downloaded. If null, `Content-Length` header will NOT be set.
  @return $this the response object itself