123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package rest
- import (
- "io"
- "os"
- )
- type IReadCloserLen interface {
- io.ReadCloser
- Len() int64
- }
- func NewReadCloserLen(rc io.ReadCloser, len int64) IReadCloserLen {
- return &readCloserLen{rc, len}
- }
- func ReadCloserLenFromFile(f *os.File) (IReadCloserLen, error) {
- fi, err := f.Stat()
- if err != nil {
- return nil, err
- }
- res := NewReadCloserLen(f, fi.Size())
- return res, nil
- }
- type readCloserLen struct {
- io.ReadCloser
- size int64
- }
- func (s *readCloserLen) Len() int64 {
- return s.size
- }
- func NewTemporaryFile(size int64, r io.Reader) (IReadCloserLen, IErrorArgs) {
- // Создаем временный файл
- f, err := os.CreateTemp("", "*")
- if err != nil {
- return nil, ErrorMessage("ErrTempFileCrete", err.Error())
- }
- if _, err := io.CopyN(f, r, size); err != nil {
- f.Close()
- os.Remove(f.Name())
- return nil, ErrorMessage("ErrTempFileCopy", err.Error())
- }
- tmp := &TemporaryFile{
- File: f,
- size: size,
- }
- return tmp, nil
- }
- type TemporaryFile struct {
- *os.File
- size int64
- }
- func (s *TemporaryFile) Len() int64 {
- return s.size
- }
- func (s *TemporaryFile) Close() error {
- if err := s.File.Close(); err != nil {
- return err
- }
- return os.Remove(s.File.Name())
- }
- type IReadCloser interface {
- io.ReadCloser
- Len() int64
- }
|