Send an asset from a plugin controller
There might be a way to do this with CBaseController::renderFile(), but I'd just use craft()-&gt;request-&gt;sendFile().

The 3rd parameter is an optional $options array and you can pass a 'forceDownload' =&gt; true as one of the key => value pairs to force it to download to the browser.

Instead of hardcoding the the path to your public assets folder, you can do something like:

$path = IOHelper::getFolderName(craft()-&gt;request-&gt;getScriptFile());


That should get you the path to the folder your public index.php file is executing in and you can tack on your public asset path from there.