

ShowHN: GetURL - A CLI tool to get a public link for any file - uams
https://github.com/uams/geturl

======
uams
Something I threw together over the weekend. I've been using filepicker on a
website of mine. Realized that I could hack it to upload and share files in a
simple tool.

Inspired by cloudApp, when I found myself wanting a command line version.

~~~
chefsurfing
Well done! Also you deserve a big thanks from Filepicker.io - this is great
inbound marketing for them.

------
adlwalrus
Seems like this could be done with more respect for user/data sovereignty if
done with Node.js. Essentially, you'd cat the file into the script, it would
spin up an HTTP server, do some port knocking or whatever NAT-traversal-fu is
necessary, then spit out a link with either your raw IP, or a preconfigured
dynDNS domain name.

This way we aren't carelessly littering our data all over the "cloud".

~~~
HerraBRE
Tooting my own horn again, but you just asked for <https://pagekite.net/>:

$ pagekite.py /path/to/file.blah yourname.pagekite.me

... send people a link to <https://yourname.pagekite.me/file.blah> and it
streams from your disk. CTRL+C and it's offline with no copies stored anywhere
in the cloud. Works with entire folders too (append +indexes to generate
indexes), which is good for static HTML demos. If you want a harder-to-guess
URL, append the +hide flag to the command above.

And yes, it's open source and you can run your own relay/reverse-proxy if you
don't want to rely on me. Give it a try! :-)

~~~
voltagex_
Be proud, your domain has made BlueCoat's list of "proxy avoidance" sites and
is blocked at my workplace.

~~~
HerraBRE
Woah, I'm in the big leagues now! Blocking us actually makes perfect sense,
PageKite can be used to avoid a lot of quite reasonable corp security
policies.

Can you access sites on other domains which are connected via. PageKite? For
example my personal site, <http://bre.klaki.net/> or my kite
<http://bre.pagekite.me/> ?

~~~
voltagex_
Nothing on pagekite.me, will check the other tomorrow.

~~~
HerraBRE
This probably doesn't belong on this thread, but I would really appreciate
e-mail: bre at pagekite dot net.

------
nyan_sandwich
Another:

    
    
        cat file | curl -F 'sprunge=<-' sprunge.us

~~~
teach
Does sprunge work for non-textual data?

~~~
crohr
In the same vein, you can try <http://flag.io/>:

    
    
      curl -T /path/to/any/file flag.io
      # or
      cat some-file | curl -T - flag.io
    

Basically, pipe anything you want into it. It can also syntax-highlight your
text files.

------
corford
Nice work and very handy.

I hadn't come across filepicker.io before and reading through the geturl code
something jumped out at me:

APIKEY = check_output(['curl', '--silent', "%(fpurl)s/getKey?email=%(email)s"
% {'fpurl': FPAPIURL, 'email': email}])

From that, it looks like any random person can fill up your filepicker.io
space providing they have your API key or know the email address you used to
register the account with. Made sense when I read a bit more about what
filepicker.io actually does (i.e. a client-side embeddable javascript file
uploader) but it's something to be aware of (especially if you link your
account up to an S3 backend!).

~~~
liyanchang
One of the founders, just wanted to reply and say, yes, you are entirely
right. We put up that endpoint for a separate purpose, didn't expect people to
find it (underestimating people is clearly a bad strategy) and will be locking
it down to require a password to create/find a apikey.

In general, the apikey doesn't actually provide very much security as is; by
it's public by it's very nature as you have to put it client side and expose
it to all your users. We've got HMAC and secret keys in the pipeline for next
week :D

~~~
xxbondsxx
Will those security changes break GetURL?

Also, isn't it normal to check the referrer when using API keys? That's what
Facebook does -- API keys only work from certain domains, which effectively
restricts their access. The downside is that you need to maintain separate API
keys for every domain (staging, sandbox, etc), but the advantage is that they
don't rely on the honor system :P

------
nvk
Neat, +1 on the 'brew' addition intent :)

~~~
asdfprou
Please submit to brew!

~~~
uams
Submitted to brew. Not sure if I did everything right (first time)

<https://github.com/mxcl/homebrew/pull/15229>

------
Zash
I have no idea why I haven't installed xsel already. The help mentions a
secondary clipboard. X has a secondary clipboard? Is there a way to paste that
(like middle click for the primary)?

~~~
icebraining
Following the old zero-one-infinity rule[1], X has an arbitrary number of
clipboards; the most commonly used are PRIMARY (select+middle click),
CLIPBOARD (usually C-c/C-v or edit→copy menus) and SECONDARY which, as far as
I know, can only be pasted using applications that support it (e.g. xclip -o).

[1]: [http://www.catb.org/jargon/html/Z/Zero-One-Infinity-
Rule.htm...](http://www.catb.org/jargon/html/Z/Zero-One-Infinity-Rule.html)

------
TazeTSchnitzel
Since I have web hosting and use GitHub, here's my method:

    
    
        cp file_name ~/Projects/2012/ajf.me/ajf.me/imagedump/ && cd ~/Projects/2012/ajf.me/ajf.me/ && git add imagedump && git commit -m 'new file' && cd .. && ./update.sh
    

Elaborate, sure, but it does the job. update.sh runs git push and then does an
SSH into my server and a git pull. (Because I'm too lazy to actually set up
git on my own server)

~~~
SoftwareMaven
You don't need to set up a git server on your own sever. Just create a git
repo, add it as a remote revenue to your local repo, and use ssh+git to push
changes directly.

But if you have your own server, why don't you just scp it directly there?
That's the piece most people are missing.

~~~
xxbondsxx
SCP is really the solution here. But to be fair, I only discovered scp after a
year or two of CLI work. I might have been tempted to hack something together
like Taze's solution in my earlier days

------
lttlrck
This is awesome, it actually makes filepicker.io useful for me. My main use-
case for Dropbox has turned out to be for this kind of sharing... geturl is
waaaaaay easier.

------
netvarun
This a nice nifty script. Thanks!

Something I noticed (<https://www.filepicker.io/pricing/>): Since
filepicker.io charges by number of files and NOT by total size of files, a
free account could potentially host a huge amount of data.

Eg: 5000 files, each of 1 GB = 5 TB!!!

------
Synthpixel
It couldn't handle files with spaces, plus the link it gives initiates a
download for the file instead allowing you to view it in the browser.
Considering most of the time I want to quickly upload a file in this manner
the file is a screenshot, this is basically useless for me.

------
egonschiele
Very nice! But no Python 2.6 support?

~~~
robertskmiles
The key problem seems to be `check_output` in the `subprocess` module.

~~~
voltagex_
<https://github.com/uams/geturl/issues/7>

Edit: pull request submitted.

------
grakic
What about storage usage?

    
    
      > To make it easier to get started, if you haven't
      > put in your S3 credentials we will store them on
      > our servers, but as your usage increases we will
      > ask you to move to your own storage.

------
tldnr
Nice tool, I made something similar for dropbox a while back that
symlinks/copies files into your DB folder.

<https://github.com/BRMatt/dotfiles/blob/master/bin/dropup>

------
slig
Nice! There's an opportunity for some company sponsor this (a la
localtunnel.com and twilio).

~~~
brettcvz
Given that it uses Filepicker.io, probably makes sense for us to take a look.
The idea of turning files into URLs is one that we really like

------
MateusCaruccio
Inspired by geturl, I built this:
<http://news.ycombinator.com/item?id=4626779>

pro: no storage backend needed con: works only behind a UPnP router (most are
ok)

------
soraggi
I really liked it, so I ported it to perl implementing a basic caching system
(SHA1), I hope you don't mind: <https://github.com/psychotropic/Get--Url/>

------
3rd3
I still prefer Dropbox because you have better control about what you upload.

Simply copy your files into ~/Dropbox/Public, right-click and choose Dropbox >
Copy Public URL. Voilà!

~~~
cowsaysoink
Except that Dropbox has now discontinued their public folders in exchange for
there get link everywhere (which requires you to click add to dropbox or a
download button rather than direct access).

~~~
3rd3
I’m not sure what you mean. The method I wrote about still seem to work.

~~~
cowsaysoink
All new accounts no longer have a public folder.

~~~
azernik
Yes - all that means is that now you can move a file into anywhere in your
Dropbox, right-click it, and click (in the Nautilus plugin) "Share Link" and
get a publicly available link.

The only thing that the Public folder did differently was that it did the
equivalent of "Share Link" for every file in it, and also had a public index
of files in the folder.

------
syassami
Very awesome tool, it's a great way of sharing nice and quickly!

------
Macphisto
Nice utility!

Just a note:

28: exit("`curl` is requrired. Please install it")

~~~
uams
Haha. I'll fix that when I get a chance; pull requests are encouraged :D

