这是 Response::download 函数中的一个错误。将其更改为:
// File: vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php
public static function download($file, $name = null, array $headers = array(), $disposition = 'attachment')
{
$response = new BinaryFileResponse($file, 200, $headers, true);
if (is_null($name))
{
$name = basename($file);
}
return $response->setContentDisposition($disposition, $name, Str::ascii($name));
}
https://github.com/laravel/framework/pull/4296
Laravel 5
在 Laravel 5 中,您可以扩展 \Illuminate\Routing\ResponseFactory 类并覆盖 download() 方法。然后,在 ServiceProvider 中,将您的自定义 ResponseFactory 注册为默认值:
// We extends \Illuminate\Routing\ResponseFactory class, that implements Illuminate\Contracts\Routing\ResponseFactory
$this->app->singleton('Illuminate\Contracts\Routing\ResponseFactory', function ($app) {
return new MyCustomResponseFactoryExtendedFromResponseFactory($app['Illuminate\Contracts\View\Factory'], $app['redirect']);
});
这样做,您可以使用默认方法(Response::json()、respose()->view() 等)和您的自定义方法同理:Response::download(), _response()->download