Add template func FileSize
This commit is contained in:
		
							parent
							
								
									3d032dfb5a
								
							
						
					
					
						commit
						4224ef142e
					
				
					 2 changed files with 47 additions and 0 deletions
				
			
		|  | @ -21,6 +21,7 @@ var TemplateFuncs template.FuncMap = map[string]interface{}{ | |||
| 	}, | ||||
| 	"str2html":   Str2html, | ||||
| 	"TimeSince":  TimeSince, | ||||
| 	"FileSize":   FileSize, | ||||
| 	"Subtract":   Subtract, | ||||
| 	"ActionIcon": ActionIcon, | ||||
| 	"ActionDesc": ActionDesc, | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ import ( | |||
| 	"crypto/md5" | ||||
| 	"encoding/hex" | ||||
| 	"fmt" | ||||
| 	"math" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| ) | ||||
|  | @ -80,6 +81,51 @@ func TimeSince(then time.Time) string { | |||
| 	return then.String() | ||||
| } | ||||
| 
 | ||||
| const ( | ||||
| 	Byte  = 1 | ||||
| 	KByte = Byte * 1024 | ||||
| 	MByte = KByte * 1024 | ||||
| 	GByte = MByte * 1024 | ||||
| 	TByte = GByte * 1024 | ||||
| 	PByte = TByte * 1024 | ||||
| 	EByte = PByte * 1024 | ||||
| ) | ||||
| 
 | ||||
| var bytesSizeTable = map[string]uint64{ | ||||
| 	"b":  Byte, | ||||
| 	"kb": KByte, | ||||
| 	"mb": MByte, | ||||
| 	"gb": GByte, | ||||
| 	"tb": TByte, | ||||
| 	"pb": PByte, | ||||
| 	"eb": EByte, | ||||
| } | ||||
| 
 | ||||
| func logn(n, b float64) float64 { | ||||
| 	return math.Log(n) / math.Log(b) | ||||
| } | ||||
| 
 | ||||
| func humanateBytes(s uint64, base float64, sizes []string) string { | ||||
| 	if s < 10 { | ||||
| 		return fmt.Sprintf("%dB", s) | ||||
| 	} | ||||
| 	e := math.Floor(logn(float64(s), base)) | ||||
| 	suffix := sizes[int(e)] | ||||
| 	val := float64(s) / math.Pow(base, math.Floor(e)) | ||||
| 	f := "%.0f" | ||||
| 	if val < 10 { | ||||
| 		f = "%.1f" | ||||
| 	} | ||||
| 
 | ||||
| 	return fmt.Sprintf(f+"%s", val, suffix) | ||||
| } | ||||
| 
 | ||||
| // FileSize calculates the file size and generate user-friendly string.
 | ||||
| func FileSize(s uint64) string { | ||||
| 	sizes := []string{"B", "KB", "MB", "GB", "TB", "PB", "EB"} | ||||
| 	return humanateBytes(uint64(s), 1024, sizes) | ||||
| } | ||||
| 
 | ||||
| // Subtract deals with subtraction of all types of number.
 | ||||
| func Subtract(left interface{}, right interface{}) interface{} { | ||||
| 	var rleft, rright int64 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue