如何从base64编码字符串获取原始文件大小



我想从字符串变量中获取原始文件的大小,该文件是通过使用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)是原始文件的大小。

  1. 您可以使用以下公式来计算文件大小:

x =(n *(3/4(( - y其中:

  1. x是字节中文件的大小
  2. n是len(datas)
  3. y如果base64以'=='结尾,则为2,如果base64以'='。
  4. 结束。

最新更新