3

sonata-bundle でダウンロードしたファイルの名前を変更するには?

ファイルは PDF で、データベース フォルダの名前は次のとおり/upload/media/default/0001/01/0000000013ac6bf9000000017c7d6398.pdf です。ファイルが次のように表示されるようにします。/upload/media/0001/01/myfile.pdf

ありがとうございました !!

4

2 に答える 2

0

ダウンロード前にファイル (ファイル タイプのみ) の名前を変更するには、以前の回答に従ってクラスを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);
}
于 2015-07-31T16:24:19.807 に答える