♻️ Fragment based multipart upload API
This commit is contained in:
@ -12,6 +12,12 @@ const (
|
||||
AttachmentDstTemporary = 0 // The destination 0 is a reserved config for pre-upload processing
|
||||
)
|
||||
|
||||
const (
|
||||
AttachmentTypeNormal = iota
|
||||
AttachmentTypeThumbnail
|
||||
AttachmentTypeCompressed
|
||||
)
|
||||
|
||||
type Attachment struct {
|
||||
cruda.BaseModel
|
||||
|
||||
@ -35,15 +41,20 @@ type Attachment struct {
|
||||
Metadata datatypes.JSONMap `json:"metadata"` // This field is analyzer auto generated metadata
|
||||
Usermeta datatypes.JSONMap `json:"usermeta"` // This field is user set metadata
|
||||
|
||||
Thumbnail string `json:"thumbnail"` // The cover image of audio / video attachment
|
||||
ContentRating int `json:"content_rating"` // This field use to filter mature content or not
|
||||
QualityRating int `json:"quality_rating"` // This field use to filter good content or not
|
||||
ContentRating int `json:"content_rating"` // This field use to filter mature content or not
|
||||
QualityRating int `json:"quality_rating"` // This field use to filter good content or not
|
||||
|
||||
IsAnalyzed bool `json:"is_analyzed"`
|
||||
IsUploaded bool `json:"is_uploaded"`
|
||||
IsSelfRef bool `json:"is_self_ref"`
|
||||
IsIndexable bool `json:"is_indexable"` // Show this attachment in the public directory api or not
|
||||
|
||||
UsedCount int `json:"used_count"`
|
||||
|
||||
Thumbnail *Attachment `json:"thumbnail"`
|
||||
ThumbnailID *uint `json:"thumbnail_id"`
|
||||
Compressed *Attachment `json:"compressed"`
|
||||
CompressedID *uint `json:"compressed_id"`
|
||||
|
||||
Ref *Attachment `json:"ref"`
|
||||
RefID *uint `json:"ref_id"`
|
||||
|
||||
@ -53,5 +64,50 @@ type Attachment struct {
|
||||
AccountID uint `json:"account_id"`
|
||||
|
||||
// Outdated fields, just for backward compatibility
|
||||
IsMature bool `json:"is_mature"`
|
||||
IsMature bool `json:"is_mature" gorm:"-"`
|
||||
}
|
||||
|
||||
// Data model for in progress multipart attachments
|
||||
type AttachmentFragment struct {
|
||||
cruda.BaseModel
|
||||
|
||||
// Random ID is for accessing (appear in URL)
|
||||
Rid string `json:"rid" gorm:"uniqueIndex"`
|
||||
// Unique ID is for storing (appear in local file name or object name)
|
||||
Uuid string `json:"uuid"`
|
||||
|
||||
Size int64 `json:"size"`
|
||||
Name string `json:"name"`
|
||||
Alternative string `json:"alt"`
|
||||
MimeType string `json:"mimetype"`
|
||||
HashCode string `json:"hash"`
|
||||
Fingerprint *string `json:"fingerprint"` // Client side generated hash, for continue uploading
|
||||
|
||||
FileChunks datatypes.JSONMap `json:"file_chunks"`
|
||||
|
||||
Metadata datatypes.JSONMap `json:"metadata"` // This field is analyzer auto generated metadata
|
||||
Usermeta datatypes.JSONMap `json:"usermeta"` // This field is user set metadata
|
||||
|
||||
Pool *AttachmentPool `json:"pool"`
|
||||
PoolID *uint `json:"pool_id"`
|
||||
|
||||
AccountID uint `json:"account_id"`
|
||||
}
|
||||
|
||||
func (v AttachmentFragment) ToAttachment() Attachment {
|
||||
return Attachment{
|
||||
Rid: v.Rid,
|
||||
Uuid: v.Uuid,
|
||||
Size: v.Size,
|
||||
Name: v.Name,
|
||||
Alternative: v.Alternative,
|
||||
MimeType: v.MimeType,
|
||||
HashCode: v.HashCode,
|
||||
Metadata: v.Metadata,
|
||||
Usermeta: v.Usermeta,
|
||||
Destination: AttachmentDstTemporary,
|
||||
Pool: v.Pool,
|
||||
PoolID: v.PoolID,
|
||||
AccountID: v.AccountID,
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user