28 lines
882 B
Go
28 lines
882 B
Go
|
|
// Package pdfvalidate 对「已解码的 PDF 二进制」做格式与尺寸校验(与 multipart 发往数据源的字节一致)
|
|||
|
|
package pdfvalidate
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"bytes"
|
|||
|
|
"errors"
|
|||
|
|
"fmt"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// MaxAuthorizePDFBytes 授权类 PDF 大小上限(与汇博等对接约定一致)
|
|||
|
|
const MaxAuthorizePDFBytes = 500 * 1024
|
|||
|
|
|
|||
|
|
var pdfMagic = []byte("%PDF-")
|
|||
|
|
|
|||
|
|
// ValidateDecodedPDFBinary 仅校验已通过 Base64 解码得到的原始字节:非空、长度、PDF 魔数头部。
|
|||
|
|
func ValidateDecodedPDFBinary(raw []byte) error {
|
|||
|
|
if len(raw) == 0 {
|
|||
|
|
return errors.New("授权书文件不能为空")
|
|||
|
|
}
|
|||
|
|
if len(raw) > MaxAuthorizePDFBytes {
|
|||
|
|
return fmt.Errorf("授权书文件不能超过500KB,当前大小: %d字节", len(raw))
|
|||
|
|
}
|
|||
|
|
if len(raw) < len(pdfMagic) || !bytes.Equal(raw[:len(pdfMagic)], pdfMagic) {
|
|||
|
|
return errors.New("授权书文件必须为PDF格式")
|
|||
|
|
}
|
|||
|
|
return nil
|
|||
|
|
}
|