From f58a37540ec5bcec7c0f886cfd1955aecc4649e4 Mon Sep 17 00:00:00 2001 From: Nicholas Orr Date: Wed, 29 Apr 2015 23:01:22 +0800 Subject: [PATCH] Tutorial for DirectURL Enough information for somehow who was able to setup aria2 in daemon mode on a remote server to use this config option to enable direct downloads of files via http --- README.md | 6 +++++ directurl.md | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 directurl.md diff --git a/README.md b/README.md index ab5d538..59d835f 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,12 @@ Configuration ============= Read and edit [configuration.js](configuration.js). +DirectURL +--------- +If you are familiar with how webservers work, setup a location that points at the configured download directory, check permissions. Specify a full url: ```http://server:port/``` + +If the above is not obvious, keep reading what this is about in [directurl.md](directurl.md) + Dependencies ============ Well, you need aria2. And a web browser (if that even counts!) diff --git a/directurl.md b/directurl.md new file mode 100644 index 0000000..4d6ebe1 --- /dev/null +++ b/directurl.md @@ -0,0 +1,64 @@ +DirectURL +========= +Consider the following scenarios: + +1. aria2 is running on a computer that is not locally accessible via the LAN and the files need to be copied from remote aria2 computer to the local computer +2. aria2 is running locally somewhere and setting up samba/nfs/etc is "meh" + +HTTP to the rescue, already in the browser right? + +Simplest way is to use a straightforward Node.js library. In the below complete prescription [send](https://github.com/pillarjs/send) will be used. + +Requirements +------------ +Node.js & NPM + +Follow relevant section: [Installing Node.js via package manager](https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager) + +Steps +----- +1. as part of configuring aria2 to make life easier you will have set the global **dir** option to something like **/home/aria2/downloads** +2. clearly this folder is owned by the user **aria2** +3. open a shell session logged in as **aria2** +4. run ```cd /home/aria2/downloads``` +5. run ```npm install send``` +6. run ```nano send.js``` or vi if that's your thing +7. paste the content from below **send.js** +8. save the file making changes where appropriate _(follow the comments)_ +9. run ```node send.js``` +10. webserver is now running on port 3000 and will serve files from the directory specified +11. to test open up http://serverip:3000 - should get a response from the webserver, 2 lines of text, any browser errors and something hasn't been done properly, check IP/PORT etc +12. go back to webui-aria2 +13. go to ```Settings > Connection Settings``` +14. scroll down to Direct Download and put ```http://serverip:3000/``` in base URL field _(make sure have the / on the end)_ +15. now that URL has been specified all the files will be converted into clickable links +16. checkout the ```more info``` on a download and see for yourself +17. if you click on files that aren't finished downloading ```you're going to have a bad day``` + +### send.js + +```js +var http = require('http'); +var send = require('send'); +var url = require('url'); + +var app = http.createServer(function(req, res){ + // this one allows the service to fail gracefully and give some feedback + function error(err) { + res.statusCode = err.status || 500; + res.end(err.message); + } + + // this just makes sure everything is downloaded and not opened in the browser + function headers(res, path, stat) { + res.setHeader('Content-Disposition', 'attachment'); + } + + // specify the same directory that aria2 is using to save files + // not sure exactly how windows paths should be done, see if 'c:\downloads' works.. + send(req, url.parse(req.url).pathname, {root: '/home/aria2/downloads'}) + .on('error', error) + .on('headers', headers) + .pipe(res); +}).listen(3000); // change this to .listen(3000,'127.0.0.1') to only respond to localhost requests then access via SSH tunnel or put stunnel in front of it etc +``` \ No newline at end of file