Check for file size with JavaScript before uploading

by Yang Yang on January 1, 2009

Share This Article:
Subscribe to Kavoir: blog feed

File uploading is a rather common feature of interactive sites. As all servers come with a limit on the size of the file being uploaded, it would be a usability blessing for users if web developers can implement a logic to check for the file size before uploading, informing the user if the size of the file exceeds the max.

At the server side, it’s easy to weigh the file in bytes, with PHP, ASP or JSP. However it would be waste of resources if one can only check the size of the file that has already been uploaded because there’s no point to it if he is trying to inform the user if the file is too large.

So can this be done on the client side?

Yes, but partially and indecently. JavaScript is built with client safety in mind thus given no clearance to access client file system, falling unable to get the size of any chosen file. VBScript, on the other hand, can return the size of any client file with the help of ActiveX Object, the Microsoft proprietary scripting API.

Consider the code below:

<html>
<head>
<script>
function getSize()
{
	var myFSO = new ActiveXObject("Scripting.FileSystemObject");
	var filepath = document.upload.file.value;
	var thefile = myFSO.getFile(filepath);
	var size = thefile.size;
	alert(size + " bytes");
}
</script>
</head>
<body>
<form name="upload">
<input type="file" name="file">
<input type="button" value="Size?" onClick="getSize();">
</form>
</body>
</html>

Rather gross and obselete code with regard to modern front end coding standards, though it does the job. Run it on IE, select a file and click “Size?”, the browser alerts with the size of the file.

file size got by javascript

It’s the only way I know as of now that successfully checks the size of a given file completely on client side.

Share This Article:
Subscribe to Kavoir: blog feed

You should also read:

{ 25 comments… read them below or add one }

indy January 15, 2009 at 12:32 pm

no effect on google chrome browser.

ie 7 – requests to run active x object but didnt work might have to tweak a bit

Reply

Eugenio January 20, 2009 at 11:00 am

Maybe you should use a swf and pass the file through a flash var and return the filesize through a javascript in the flash element

Reply

Yang Yang February 26, 2010 at 3:25 pm

That’s the way!

Reply

Gautam May 4, 2009 at 7:42 pm

It’s Not working i have to upload multiple files.I just add the files in temporary using javascript but it’s Not working it’ll give error ActiveXObject object is not define.

Reply

saleem March 1, 2010 at 4:14 am

Same err for me too..do u get the result for thi sbug.. if so pls sent the solution to saleem.hbs@gmail.com

Reply

asian dating lover May 18, 2009 at 2:41 am

This is tough to do with the security restrictions. If anyone has another way that works in FF – Opera and IE without active-x, that would make my day. Checking server side is not only a waste of resources but leaves you open for DOS attack.

Reply

Yang Yang February 26, 2010 at 3:25 pm

Really? dos attacks?

Reply

Craig October 13, 2011 at 5:34 am

Of course, they just upload 100 20GB files at once to your site, tying up all your server threads for an inordinate period of time and possibly taking down the server entirely.

Reply

tester January 7, 2010 at 1:25 am

This site is doing it somehow in Firefox and Safari but not in IE and Crome: ajaxbrowser.com

Reply

Yang Yang March 1, 2010 at 11:56 am

Hi, everyone thanks for leaving comments, but as I stated in the post, this can only be done partially and indecently. It’s impossible to implement a feature like this across all major modern browsers because that’d be a security problem which many other browsers frown upon. JavaScript is not designed to access local computer hard disk in any way so that visitors cannot be hacked by any website.

ActiveXObject is an IE proprietary object that thus far is able to do this. So this trick only works in IE. I’ve just done yet another test and taken the screenshot above. It does work.

Reply

Sudhir May 5, 2010 at 1:03 pm

ActiveXObject only works in IE… not in mozilla….

Reply

md June 7, 2010 at 5:22 pm

upload file even space is there (java script)
example “a.doc” it is working fine but i want to upload file “a .doc “

Reply

Timothy (TRiG) September 20, 2010 at 6:42 pm

There are three methods:

1. ActiveX: Works only in IE, and doesn’t work nicely even there (gives a security warning).

2. Flash (or perhaps Java): It seems silly to use a plugin just for uploading files.

3. HTML5 and JavaScript: Not yet widely adopted. Works in newer versions of Firefox and Chrome. Good tips available on the Mozilla developer blogs.

TRiG.

Reply

Yang Yang September 21, 2010 at 12:09 am

Great sum-up, Tim!

Reply

T. Krishna Chaitanya October 16, 2010 at 1:07 pm

I think action script is the right way to check the file size at client side. But we have to force the user to install flash plugin in the browser.

Forcing the user is the right approach because instead of just uploading it to the server and checking the file size and breaking the request and asking him to upload the specified size file is somewhat time consuming. Because prevention is better than cure.

What you say.

Regards,
kittu_564@yahoo.in

Reply

George November 15, 2010 at 8:19 pm

Hi!

I have a question: I copy-pasted your code into 2 files, “test.html” and “test.php”, both in the root of my localhost server (I use xampp). These files contain nothing but your code.
The problem is that in .php file, the active x doesn’t run. I receive the error:
“Error: Automation server can not create object”.

I repeat, in the .html file it works, in .php doesn’t. Do you have an idea why this is happening?

Please send me an email when you post a reply.
Thanks and keep up the good work!

Reply

George November 15, 2010 at 8:31 pm

I tested more and it seems that no file works if it is in the root folder of my local server.
If I move the .html file outside of this folder (ie on the desktop) it work. :( this is very annoying.

Do you have any ideeas how to make this work?

Reply

Viswanath December 29, 2010 at 2:40 pm

when you the upload the file of size more than 25MB in gmail attachements, it does the client side validation and shows the popup. It works both in IE and FF.
Let me know if any one has idea how gmail attachement file size limit works.

Reply

James July 19, 2011 at 4:18 am

Its a Flash Based solution, If you use a non flash browser,or device, gmail will revert back to a traditional solution of uploading until the max size is reached and then, if too large gmail will then proceed in letting you know your files are too large!

Reply

shyam February 25, 2011 at 2:48 pm

Hi

I hav 1 pblm in this case.The Error is ” automation server can’t create object “.

pls reply a solutiom

Reply

tams August 8, 2011 at 2:32 pm

I have copied this code into a html page and tested, and it shows an error called:
“Automation server can’t create object”

Reply

Salsan @ India October 20, 2011 at 3:47 pm

Its only working on Internet Explorer.

Reply

siva November 8, 2011 at 3:09 pm

Error: ActiveXObject is not defined
Source file: http://localhost/projects/gold_house_furniture/admin/adproductadd.php
Line: 58

Reply

Ed December 8, 2011 at 6:19 am

This is a pretty obsolete solution, any modern web developer I know would find this laughable.

Reply

Dhaval Vithalani February 7, 2012 at 6:50 pm

i am sorry but this code is not working in mozila firefox.. it’s properly working IE.
what can i do???
please do the needfull.

Thanks

Reply

Leave a Comment

Previous post:

Next post: