I work at a company with a number of geographic locations: R&D in one country, HQ in another, and a sales team worldwide. Add to that a number of vendors we use from time to time (eg. Graphic designer) and it’d be safe to say we’ve got the world covered! And with this comes its own logistics challenges. It amazes me how we continue to struggle to send large files to each other. Yes, I know there are excellent solutions such as dropbox or egnyte, but sometimes you don’t want to go the hassle of giving a person specific access to one of your files. And space is still a premium and you inevitably end up struggling to clean out older files to make room for the newer ones.
I often run into the same problem just trying to transfer a file from one server to another. I may remote desktop into one box and need to get a file from another computer.
So, enter the solution: I decided to create a very simple file transfer site. The concept is not exactly new, but I wanted to make it extremely quick and convenient to use. The result…a site I call transfer.ly (http://transfer.ly)
Transfer.ly allows you to quickly add files and click Transfer. You get a unique, private link to retrieve your files. Then, the files are destroyed after 5 days…5days being more than enough to either send files to someone or to transfer them from one computer to another. I made sure that you can do all of this without even creating an account. Just click and go! Or should I say, click and transfer!
Conceptually the site is obviously quite simple. I was toying with the idea one Saturday morning and deciding whether I should do it or not, when I found that the transfer.ly domain was available. That made up my mind! Let’s do it!
As with most projects, I quickly ran into scope creep.
I started with the simple transfer. The first problem I ran into was that the file upload would fail at around 30mb. I finally figured out that there is a IIS setting as part of its RequestFiltering that automatically kills connections at the 30mb mar as part of its hacking prevention. I changed this to allow more than 30mb, but even there IIS still has some size limits, which I will explain in a minute.
Having solved the 30mb problem, I then would still run into problems at around 150mb depending on the connection speed. The logs revealed that I was getting an http timeout. Interestingly enough, once the file upload is taking place, the app server believes that the http session is idle…this does make sense since the web server is handling the file receiving. So after the 5 minute timeout setting the appserver would kill my http session during the upload. Sure, I could set this to a larger number but the problem is that the time would be entirely dependent on the file sizes being uploaded.
So everything was working pretty well, but large file transfers were still a little unstable. For one, the slightest internet connection hickup and you have to start all over again, and second, IIS has inherent file size limitations. To solve these issues, I added an Advanced upload feature for really large files.
The advanced upload uses a Java applet (you can still use quickupload if you don’t have Java). The Java applet will read the file in chunks and send it chunk by chunk. This allows IIS to think its only getting small files so gets around the size issue. Plus, the applet can resume if the connection fails. The server side code receives the chunks and pieces together file into one file.
As a security measure, all the files being upload get their names randomized. You can also optionally specify a keycode that would be required to grant access to the files.
So there you have it…it started as an extremely simple idea (actually that never changed) but the implementation got a little more complex. At any rate, it is working really well now.
Check it out at http://transfer.ly and be sure to let me know what you think.