Skip to content
Snippets Groups Projects
Select Git revision
  • 6c29d1c881c19ade809c5572baecdfa121d0b0ad
  • master default protected
  • refactor/PRXS-3053-Files
  • feature/PRXS-3143-3235-ReferenceOptions
  • feature/PRXS-3421-ImplementNewRefAPI
  • feature/PRXS-3143-LimitReferenceFields
  • feature/PRXS-3234-FeaturePruneIdents
  • feature/3149-LocaleCodeAsID-Feature
  • feature/PRXS-3383-CollectionsRankSortAPI
  • PRXS-3421-RecursiveReferences
  • feature/PRXS-3383-CollectionsSort
  • feature/3109-SerializeFeature
  • release/0.33
  • feature/3109-RecoverySchema
  • feature/3109-feature
  • fix/PRXS-3369-ValidateFields
  • refactor/PRXS-3306-MovePkgGroup1
  • refactor/6-pkg-refactor-expr
  • fix/PRXS-3360-TemplateBuilderPatch
  • feature/3293-MongoV2
  • feature/3272-GoVersionUp
  • v0.33.1
  • v0.32.0
  • v0.31.1
  • v0.31.0
  • v0.30.0
  • v0.29.0
  • v0.28.0
  • v0.27.0-alpha.1+16
  • v0.27.0-alpha.1+15
  • v0.27.0-alpha.1+14
  • v0.27.0-alpha.1+13
  • v0.27.0-alpha.1+12
  • v0.27.0-alpha.1+11
  • v0.27.0-alpha.1+10
  • v0.27.0-alpha.1+9
  • v0.27.0-alpha.1+8
  • v0.27.0-alpha.1+7
  • v0.27.0-alpha.1+6
  • v0.27.0-alpha.1+5
  • v0.27.0-alpha.1+4
41 results

error_logging_middleware.go

Blame
  • file.go 2.82 KiB
    package files
    
    import (
    	"bytes"
    	"fmt"
    	"io/fs"
    	"strings"
    	"text/template"
    
    	"git.perx.ru/perxis/perxis-go/id"
    )
    
    const (
    	TemporaryPrefix = "tmp"
    )
    
    // File - описание файла в системе хранения perxis
    type File struct {
    	ID       string  `mapstructure:"id,omitempty" json:"id" expr:"id"`                                              // Уникальный идентификатор файла в хранилище
    	Name     string  `mapstructure:"name,omitempty" json:"name" bson:"name,omitempty" expr:"name"`                  // Имя файла
    	Size     uint64  `mapstructure:"size,omitempty" json:"size" bson:"size,omitempty" expr:"size"`                  // Размер файла
    	MimeType string  `mapstructure:"mimeType,omitempty" json:"mimeType" bson:"mimeType,omitempty" expr:"mime_type"` // Mime-type файла
    	URL      string  `mapstructure:"url,omitempty" json:"url" bson:"url,omitempty" expr:"url"`                      // Адрес для загрузки файла
    	Key      string  `mapstructure:"key,omitempty" json:"key" bson:"key,omitempty" expr:"key"`                      // Ключ для хранения файла в хранилище
    	File     fs.File `mapstructure:"-" json:"-" bson:"-"`                                                           // Файл для загрузки(из файловой системы)
    }
    
    func (f File) Clone() *File {
    	return &f
    }
    
    func (f File) Temporary() bool {
    	return strings.HasPrefix(f.ID, TemporaryPrefix)
    }
    
    func (f *File) SetURLWithTemplate(t *template.Template) error {
    	if t == nil {
    		return nil
    	}
    
    	res := new(bytes.Buffer)
    	if err := t.Execute(res, f); err != nil {
    		return err
    	}
    
    	f.URL = res.String()
    	return nil
    }
    
    func NewFile(name, mimeType string, size uint64, temp bool) *File {
    	i := id.GenerateNewID()
    	if temp {
    		i = fmt.Sprintf("%s%s", TemporaryPrefix, i)
    	}
    	return &File{
    		ID:       i,
    		Name:     name,
    		Size:     size,
    		MimeType: mimeType,
    	}
    }
    
    // MultipartUpload - описание загрузки файла
    type MultipartUpload struct {
    	File
    	UploadID string           `json:"upload_id"` // Идентификатор загрузки хранилища
    	PartSize uint64           `json:"part_size"` // Размер блока для загрузки
    	PartURLs []string         `json:"part_urls"` // Адреса для загрузки полного файла
    	Parts    []*CompletedPart `json:"parts"`     // Идентификаторы загруженных блоков (S3 ETAGs)
    }
    
    // Upload - описание загрузки файла
    type Upload struct {
    	File
    	UploadURL string `json:"upload_url"` // Идентификатор загрузки хранилища
    }
    
    type CompletedPart struct {
    	Number int    `json:"part_number"`
    	ID     string `json:"id"`
    }
    
    func (u MultipartUpload) Clone() *MultipartUpload {
    	return &u
    }