6

フィルター./data/uploadsを使用して、フォルダーにファイルをアップロードするフォームを作成しました。Zend\Filter\File\RenameUpload

これは魅力のように機能しています。私の問題は、このファイルをユーザーにダウンロードして提供するにはどうすればよいですか?

私はそれが次のようなものになると思います:

$response->setContent(file_get_contents('./data/uploads/file.png'));

しかし、これを行うための最良の方法は何かを知りたいです。

4

2 に答える 2

15

答えを探してこのスレッドにたどり着いた人にとって、これは機能するソリューションであり、ストリームを使用しています!

public function downloadAction() {
    $fileName = 'somefile';

    $response = new \Zend\Http\Response\Stream();
    $response->setStream(fopen($fileName, 'r'));
    $response->setStatusCode(200);

    $headers = new \Zend\Http\Headers();
    $headers->addHeaderLine('Content-Type', 'whatever your content type is')
            ->addHeaderLine('Content-Disposition', 'attachment; filename="' . $fileName . '"')
            ->addHeaderLine('Content-Length', filesize($fileName));

    $response->setHeaders($headers);
    return $response;
}

ここにあります: zf2を使用した強制ダウンロード

詳細はこちら: zend でストリーム応答を送信する

于 2013-08-24T15:20:29.690 に答える
14

@henrik の回答に感謝しますが、彼の回答にはいくつかの重要なヘッダーがありません。気をつけてください。

完全なヘッダー スタック:

public function downloadAction() {
    $file = 'path/to/file';
    $response = new \Zend\Http\Response\Stream();
    $response->setStream(fopen($file, 'r'));
    $response->setStatusCode(200);
    $response->setStreamName(basename($file));
    $headers = new \Zend\Http\Headers();
    $headers->addHeaders(array(
        'Content-Disposition' => 'attachment; filename="' . basename($file) .'"',
        'Content-Type' => 'application/octet-stream',
        'Content-Length' => filesize($file),
        'Expires' => '@0', // @0, because zf2 parses date as string to \DateTime() object
        'Cache-Control' => 'must-revalidate',
        'Pragma' => 'public'
    ));
    $response->setHeaders($headers);
    return $response;
}
于 2015-05-21T11:06:06.280 に答える