Kohsuke Hada
4/4/2014 - 1:04 PM

別サーバのファイルを取得してファイル サイズをリンク横に出力するスクリプト

別サーバのファイルを取得してファイル サイズをリンク横に出力するスクリプト

$("document").ready(function() {

	//別サーバのファイルを取得してファイル サイズをリンク横に出力するスクリプト
	
	//IMG タグの場合と  class="noFileInfo" 指定の場合は除外
	$("a[href]").not(":has('img')").not(".noFileInfo").each(function() {
		
		var obj = $(this);
		var href = obj.attr('href');
		
		//サイズを取得するファイル拡張子の絞り込み
		if (href.match(/\.(TXT|CSV|PDF|MP3|ISO|ZIP|7Z|LZH|RAR|EXE|DMG|SIT|TAR|GZ|DOC|DOCX|XLS|XLSX|PPT|PPTX|MOV|AVI|MP4|WMV|MSI|MSP|SWF)$/i)) {
			
			e_uri = encodeURIComponent( href );
			
			//JSP を使用する場合
			request_url = "//<ファイルが設置されているサーバ>/cgi-bin/getFileSize.jsp?url=" + e_uri + "&callback=?";	
			
			//PHP を使用する場合
			request_url = "//<ファイルが設置されているサーバ>/cgi-bin/getFileSize.php?url=" + e_uri + "&callback=?";
						
			$.getJSON(request_url, jsonpCallback);

		}
	
		//コールバック関数
		function jsonpCallback(json) {	
						
			var iHrefLength = href.length;
			var iDot = href.lastIndexOf(".");
			var sExtension = href.substring(iDot+1,iHrefLength);
			sExtension = sExtension.toUpperCase();
					
			var regExp = /PDF([?#&][\w]+[=]\d)+$/;
	
			if(regExp.test(sExtension)) {
				sExtension = '';
			}
				if ( json.size > 0) {
					obj.after(' <span class="fileInfo">['+ sExtension + ' ' + conv_unit(json.size)+']</span>');
				}
				else{
					obj.after(' <span class="fileInfo">['+ sExtension+']</span>');
				}
		}	
	});
});



//ファイル サイズを変換する関数群

var number_format = function(val) {
	var s = '' + val;
	if (s.length > 3) {
		var r = ((r = s.length % 3) == 0 ? 3 : r);
		var d = s.substring(r);
		s = s.substr(0, r) + d.replace(/(\d{3})/g, ",$1");
	}
	return s;
};


var conv_unit = function(size) {
	var unit = ['KB','MB','GB','TB','PB','EB','ZB','YB'];
	if (size < 1024) return size + 'B';
	for (var i = 0; i < unit.length; i++) {
		size /= 1024;
		if (size < 1024) {
			if (size >= 100)
				return number_format(Math.round(size)) + unit[i];
			else
				return Math.round(size*10)/10 + unit[i];
		}
	}
	return number_format(Math.round(size)) + 'YB';
};