func (r *Reader) Size() int64 {
	return r.size
}
Size returns the size of the object in bytes.
The returned value is always the same and is not affected by
calls to Read or Close.
package storage
import (
	"fmt"
	"hash/crc32"
	"io"
)
var crc32cTable = crc32.MakeTable(crc32.Castagnoli)
type Reader struct {
	body         io.ReadCloser
	remain, size int64
	contentType  string
	checkCRC     bool    
	wantCRC      uint32  
	gotCRC       uint32  
}
func (r *Reader) Close() error {
	return r.body.Close()
}
func (r *Reader) Read(p []byte) (int, error) {
	n, err := r.body.Read(p)
	if r.remain != -1 {
		r.remain -= int64(n)
	}
	if r.checkCRC {
		r.gotCRC = crc32.Update(r.gotCRC, crc32cTable, p[:n])
		if r.remain == 0 && r.gotCRC != r.wantCRC {
			return n, fmt.Errorf("storage: bad CRC on read: got %d, want %d",
				r.gotCRC, r.wantCRC)
		}
	}
	return n, err
}