Jump to content

How to keep duplicate files out?


sangoku

Recommended Posts

Hy i am a tidiness freak, so naturally i don't want users to  upload the same file over and over again XD...  :wtf:

 

So how could i prevent them from doing it except to check the crc value of files and compare them,,, i was thinking like making a string which has crc of the file and file name in it and if any of those matches then i would trigger the error... any other ideas? i am thinking of making a  md from the name for the easing of comparing. Is it possible to generate a integer from those values  or some other trick would do it to, i am totally open to all suggestions....

 

 

Link to comment
Share on other sites

if it were that simple.... the files are distributed across different folders... and the files can be pictures zip, exe, swf...

 

But what most concerning is there are TONS of the same picture just in different format like twitty.png twitty.jpeg and all are virtually the same picture just saved under different name.

 

BUT that was not the main point the main point i need a way to preprocess the controlling value inside the client browser, can jscript generate the control values i need like the a file and see its crc/md5  or a string or would i have to implement that on the server(which i would rather not do.... server load  :P

 

and i am planing to keep the values in a db normally.... disk seeks are slow in big folders

Link to comment
Share on other sites

Pretty sure you will need to do the processing server side unfortunately (although I'm no JS expert). With pictures in different formats you aren't going to be able to tell if they're the same since they're saved differently, and as such have different data entirely. You could "outsmart" this however by logging all image file widths and heights, and having a script search for pictures of duplicate sizes (or aspect ratio's if you want to get really clever with it and they've sometimes been resized) and display them for you to pick off the duplicates

Link to comment
Share on other sites

~.~

 

Found it  XD 

 

here is the script... i now only have to figure out how to apply it on the file....

 

/**
*
*  MD5 (Message-Digest Algorithm)
*  http://www.webtoolkit.info/
*
**/

var MD5 = function (string) {

function RotateLeft(lValue, iShiftBits) {
	return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
}

function AddUnsigned(lX,lY) {
	var lX4,lY4,lX8,lY8,lResult;
	lX8 = (lX & 0x80000000);
	lY8 = (lY & 0x80000000);
	lX4 = (lX & 0x40000000);
	lY4 = (lY & 0x40000000);
	lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
	if (lX4 & lY4) {
		return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
	}
	if (lX4 | lY4) {
		if (lResult & 0x40000000) {
			return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
		} else {
			return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
		}
	} else {
		return (lResult ^ lX8 ^ lY8);
	}
	}

	function F(x,y,z) { return (x & y) | ((~x) & z); }
	function G(x,y,z) { return (x & z) | (y & (~z)); }
	function H(x,y,z) { return (x ^ y ^ z); }
function I(x,y,z) { return (y ^ (x | (~z))); }

function FF(a,b,c,d,x,s,ac) {
	a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
	return AddUnsigned(RotateLeft(a, s), b);
};

function GG(a,b,c,d,x,s,ac) {
	a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
	return AddUnsigned(RotateLeft(a, s), b);
};

function HH(a,b,c,d,x,s,ac) {
	a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
	return AddUnsigned(RotateLeft(a, s), b);
};

function II(a,b,c,d,x,s,ac) {
	a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
	return AddUnsigned(RotateLeft(a, s), b);
};

function ConvertToWordArray(string) {
	var lWordCount;
	var lMessageLength = string.length;
	var lNumberOfWords_temp1=lMessageLength + 8;
	var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
	var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
	var lWordArray=Array(lNumberOfWords-1);
	var lBytePosition = 0;
	var lByteCount = 0;
	while ( lByteCount < lMessageLength ) {
		lWordCount = (lByteCount-(lByteCount % 4))/4;
		lBytePosition = (lByteCount % 4)*8;
		lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
		lByteCount++;
	}
	lWordCount = (lByteCount-(lByteCount % 4))/4;
	lBytePosition = (lByteCount % 4)*8;
	lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
	lWordArray[lNumberOfWords-2] = lMessageLength<<3;
	lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
	return lWordArray;
};

function WordToHex(lValue) {
	var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
	for (lCount = 0;lCount<=3;lCount++) {
		lByte = (lValue>>>(lCount*) & 255;
		WordToHexValue_temp = "0" + lByte.toString(16);
		WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
	}
	return WordToHexValue;
};

function Utf8Encode(string) {
	string = string.replace(/\r\n/g,"\n");
	var utftext = "";

	for (var n = 0; n < string.length; n++) {

		var c = string.charCodeAt(n);

		if (c < 128) {
			utftext += String.fromCharCode(c);
		}
		else if((c > 127) && (c < 2048)) {
			utftext += String.fromCharCode((c >> 6) | 192);
			utftext += String.fromCharCode((c & 63) | 128);
		}
		else {
			utftext += String.fromCharCode((c >> 12) | 224);
			utftext += String.fromCharCode(((c >> 6) & 63) | 128);
			utftext += String.fromCharCode((c & 63) | 128);
		}

	}

	return utftext;
};

var x=Array();
var k,AA,BB,CC,DD,a,b,c,d;
var S11=7, S12=12, S13=17, S14=22;
var S21=5, S22=9 , S23=14, S24=20;
var S31=4, S32=11, S33=16, S34=23;
var S41=6, S42=10, S43=15, S44=21;

string = Utf8Encode(string);

x = ConvertToWordArray(string);

a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;

for (k=0;k<x.length;k+=16) {
	AA=a; BB=b; CC=c; DD=d;
	a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
	d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
	c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
	b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
	a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
	d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
	c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
	b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
	a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
	d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
	c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
	b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
	a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
	d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
	c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
	b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
	a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
	d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
	c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
	b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
	a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
	d=GG(d,a,b,c,x[k+10],S22,0x2441453);
	c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
	b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
	a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
	d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
	c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
	b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
	a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
	d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
	c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
	b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
	a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
	d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
	c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
	b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
	a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
	d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
	c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
	b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
	a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
	d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
	c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
	b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
	a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
	d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
	c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
	b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
	a=II(a,b,c,d,x[k+0], S41,0xF4292244);
	d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
	c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
	b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
	a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
	d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
	c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
	b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
	a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
	d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
	c=II(c,d,a,b,x[k+6], S43,0xA3014314);
	b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
	a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
	d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
	c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
	b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
	a=AddUnsigned(a,AA);
	b=AddUnsigned(b,BB);
	c=AddUnsigned(c,CC);
	d=AddUnsigned(d,DD);
}

var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);

return temp.toLowerCase();
}

Link to comment
Share on other sites

That is the problem. JavaScript spefically doesn't allow you to access the file system (for user security reasons) so you won't actually be able to check the md5 of the file. That function is used to hash passwords etc that are in text fields. The same does not apply to file upload fields. Your best bet would be to get this done with Java instead of JavaScript, but would require the user has Java installed and allows the applet

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.