sonata-bundle でダウンロードしたファイルの名前を変更するには?
ファイルは PDF で、データベース フォルダの名前は次のとおり/upload/media/default/0001/01/0000000013ac6bf9000000017c7d6398.pdf
です。ファイルが次のように表示されるようにします。/upload/media/0001/01/myfile.pdf
ありがとうございました !!
sonata-bundle でダウンロードしたファイルの名前を変更するには?
ファイルは PDF で、データベース フォルダの名前は次のとおり/upload/media/default/0001/01/0000000013ac6bf9000000017c7d6398.pdf
です。ファイルが次のように表示されるようにします。/upload/media/0001/01/myfile.pdf
ありがとうございました !!
ダウンロード前にファイル (ファイル タイプのみ) の名前を変更するには、以前の回答に従ってクラスをFileProvider
オーバーライドし、クラスでベース ファイル プロバイダーのgetDownloadResponse()
関数をオーバーライドして、ダウンロード ファイルの目的の名前を定義します。
public function getDownloadResponse(MediaInterface $media, $format, $mode, array $headers = array())
{
$guesser = ExtensionGuesser::getInstance();
$extension = $guesser->guess($media->getContentType());
// build the default headers
$headers = array_merge(array(
'Content-Type' => $media->getContentType(),
'Content-Disposition' => sprintf('attachment; filename="%s"', 'myfile.'.$extension),
), $headers);
if (!in_array($mode, array('http', 'X-Sendfile', 'X-Accel-Redirect'))) {
throw new \RuntimeException('Invalid mode provided');
}
if ($mode == 'http') {
if ($format == 'reference') {
$file = $this->getReferenceFile($media);
} else {
$file = $this->getFilesystem()->get($this->generatePrivateUrl($media, $format));
}
return new StreamedResponse(function() use ($file) {
echo $file->getContent();
}, 200, $headers);
}
if (!$this->getFilesystem()->getAdapter() instanceof \Sonata\MediaBundle\Filesystem\Local) {
throw new \RuntimeException('Cannot use X-Sendfile or X-Accel-Redirect with non \Sonata\MediaBundle\Filesystem\Local');
}
$filename = sprintf('%s/%s',
$this->getFilesystem()->getAdapter()->getDirectory(),
$this->generatePrivateUrl($media, $format)
);
return new BinaryFileResponse($filename, 200, $headers);
}