我想从字符串变量中获取原始文件的大小,该文件是通过使用base64 Encode文件获得的。
package main
import (
"bufio"
"encoding/base64"
"io/ioutil"
"os"
)
func encodeFile(file string) string {
f, err := os.Open(file)
if err != nil {
panic(err)
}
reader := bufio.NewReader(f)
content, _ := ioutil.ReadAll(reader)
encoded := base64.StdEncoding.EncodeToString(content)
return encoded
}
func main() {
datas := encodeFile("/tmp/hello.json")
//how to get file size from datas
}
如何从datas
获取文件大小?thks。
这应该做到:
func calcOrigBinaryLength(datas string) int {
l := len(datas)
// count how many trailing '=' there are (if any)
eq := 0
if l >= 2 {
if datas[l-1] == '=' {
eq++
}
if datas[l-2] == '=' {
eq++
}
l -= eq
}
// basically:
//
// eq == 0 : bits-wasted = 0
// eq == 1 : bits-wasted = 2
// eq == 2 : bits-wasted = 4
// each base64 character = 6 bits
// so orig length == (l*6 - eq*2) / 8
return (l*3 - eq) / 4
}
游乐场验证:https://play.golang.org/p/y4v102k74v5
好吧,base64编码的字符串的长度与原始文件不同。要获得原始尺寸,您可以下一步:1.在函数 encodeFile
中返回 len(content)
是原始文件的大小。
- 您可以使用以下公式来计算文件大小:
x =(n *(3/4(( - y其中:
- x是字节中文件的大小
- n是
len(datas)
- y如果base64以'=='结尾,则为2,如果base64以'='。 结束。