mirror of
https://github.com/ente-io/ente.git
synced 2025-08-10 00:12:04 +00:00
[server] Return both objectID and url for previewUrl
This commit is contained in:
parent
41c242a0ee
commit
aa482ea227
@ -30,6 +30,14 @@ func NewID(prefix string) (*string, error) {
|
|||||||
return &result, nil
|
return &result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MustNewID(prefix string) string {
|
||||||
|
id, err := NewID(prefix)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return *id
|
||||||
|
}
|
||||||
|
|
||||||
func ServerReqID() string {
|
func ServerReqID() string {
|
||||||
// Generate a nanoid with a custom alphabet and length of 22
|
// Generate a nanoid with a custom alphabet and length of 22
|
||||||
id, err := NewID("ser")
|
id, err := NewID("ser")
|
||||||
|
@ -2,6 +2,7 @@ package filedata
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/ente-io/museum/ente"
|
"github.com/ente-io/museum/ente"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -76,6 +77,11 @@ type PreviewUploadUrlRequest struct {
|
|||||||
Type ente.ObjectType `form:"type" binding:"required"`
|
Type ente.ObjectType `form:"type" binding:"required"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type PreviewUploadUrl struct {
|
||||||
|
Id string `json:"id" binding:"required"`
|
||||||
|
Url string `json:"url" binding:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
func (g *PreviewUploadUrlRequest) Validate() error {
|
func (g *PreviewUploadUrlRequest) Validate() error {
|
||||||
if g.Type != ente.PreviewVideo && g.Type != ente.PreviewImage {
|
if g.Type != ente.PreviewVideo && g.Type != ente.PreviewImage {
|
||||||
return ente.NewBadRequestWithMessage(fmt.Sprintf("unsupported object type %s", g.Type))
|
return ente.NewBadRequestWithMessage(fmt.Sprintf("unsupported object type %s", g.Type))
|
||||||
@ -106,18 +112,16 @@ func (r *Row) S3FileMetadataObjectKey() string {
|
|||||||
if r.Type == ente.MlData {
|
if r.Type == ente.MlData {
|
||||||
return derivedMetaPath(r.FileID, r.UserID)
|
return derivedMetaPath(r.FileID, r.UserID)
|
||||||
}
|
}
|
||||||
if r.Type == ente.PreviewVideo {
|
|
||||||
return previewVideoPlaylist(r.FileID, r.UserID)
|
|
||||||
}
|
|
||||||
panic(fmt.Sprintf("S3FileMetadata should not be written for %s type", r.Type))
|
panic(fmt.Sprintf("S3FileMetadata should not be written for %s type", r.Type))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetS3FileObjectKey returns the object key for the file data stored in the S3 bucket.
|
// GetS3FileObjectKey returns the object key for the file data stored in the S3 bucket.
|
||||||
func (r *Row) GetS3FileObjectKey() string {
|
func (r *Row) GetS3FileObjectKey() string {
|
||||||
if r.Type == ente.PreviewVideo {
|
//if r.Type == ente.PreviewVideo {
|
||||||
return previewVideoPath(r.FileID, r.UserID)
|
// return previewVideoPath(r.FileID, r.UserID)
|
||||||
} else if r.Type == ente.PreviewImage {
|
//} else if r.Type == ente.PreviewImage {
|
||||||
return previewImagePath(r.FileID, r.UserID)
|
// return previewImagePath(r.FileID, r.UserID)
|
||||||
}
|
//}
|
||||||
panic(fmt.Sprintf("unsupported object type %s", r.Type))
|
panic(fmt.Sprintf("unsupported object type %s", r.Type))
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,9 @@ package filedata
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/ente-io/museum/ente"
|
"github.com/ente-io/museum/ente"
|
||||||
|
"github.com/ente-io/museum/ente/base"
|
||||||
)
|
)
|
||||||
|
|
||||||
// BasePrefix returns the base prefix for all objects related to a file. To check if the file data is deleted,
|
// BasePrefix returns the base prefix for all objects related to a file. To check if the file data is deleted,
|
||||||
@ -13,39 +15,33 @@ func BasePrefix(fileID int64, ownerID int64) string {
|
|||||||
|
|
||||||
func AllObjects(fileID int64, ownerID int64, oType ente.ObjectType) []string {
|
func AllObjects(fileID int64, ownerID int64, oType ente.ObjectType) []string {
|
||||||
switch oType {
|
switch oType {
|
||||||
case ente.PreviewVideo:
|
|
||||||
return []string{previewVideoPath(fileID, ownerID), previewVideoPlaylist(fileID, ownerID)}
|
|
||||||
case ente.MlData:
|
case ente.MlData:
|
||||||
return []string{derivedMetaPath(fileID, ownerID)}
|
return []string{derivedMetaPath(fileID, ownerID)}
|
||||||
case ente.PreviewImage:
|
|
||||||
return []string{previewImagePath(fileID, ownerID)}
|
|
||||||
default:
|
default:
|
||||||
// throw panic saying current object type is not supported
|
// throw panic saying current object type is not supported
|
||||||
panic(fmt.Sprintf("object type %s is not supported", oType))
|
panic(fmt.Sprintf("object type %s is not supported", oType))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func PreviewUrl(fileID int64, ownerID int64, oType ente.ObjectType) string {
|
func CompleteObjectKey(fileID int64, ownerID int64, oType ente.ObjectType, id string) string {
|
||||||
switch oType {
|
switch oType {
|
||||||
case ente.PreviewVideo:
|
case ente.PreviewVideo:
|
||||||
return previewVideoPath(fileID, ownerID)
|
|
||||||
case ente.PreviewImage:
|
case ente.PreviewImage:
|
||||||
return previewImagePath(fileID, ownerID)
|
return fmt.Sprintf("%s%s/%s", BasePrefix(fileID, ownerID), string(oType), id)
|
||||||
default:
|
default:
|
||||||
panic(fmt.Sprintf("object type %s is not supported", oType))
|
panic(fmt.Sprintf("object type %s is not supported", oType))
|
||||||
}
|
}
|
||||||
|
panic(fmt.Sprintf("object type %s is not supported", oType))
|
||||||
}
|
}
|
||||||
|
|
||||||
func previewVideoPath(fileID int64, ownerID int64) string {
|
func NewUploadID(oType ente.ObjectType) string {
|
||||||
return fmt.Sprintf("%s%s", BasePrefix(fileID, ownerID), string(ente.PreviewVideo))
|
if oType == ente.PreviewVideo {
|
||||||
}
|
return base.MustNewID("pv")
|
||||||
|
} else if oType == ente.PreviewImage {
|
||||||
func previewVideoPlaylist(fileID int64, ownerID int64) string {
|
return base.MustNewID("pi")
|
||||||
return fmt.Sprintf("%s%s", previewVideoPath(fileID, ownerID), "_playlist.m3u8")
|
}
|
||||||
}
|
panic(fmt.Sprintf("object type %s is not supported", oType))
|
||||||
|
|
||||||
func previewImagePath(fileID int64, ownerID int64) string {
|
|
||||||
return fmt.Sprintf("%s%s", BasePrefix(fileID, ownerID), string(ente.PreviewImage))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func derivedMetaPath(fileID int64, ownerID int64) string {
|
func derivedMetaPath(fileID int64, ownerID int64) string {
|
||||||
|
@ -70,14 +70,12 @@ func (h *FileHandler) GetPreviewUploadURL(c *gin.Context) {
|
|||||||
handler.Error(c, stacktrace.Propagate(ente.ErrBadRequest, fmt.Sprintf("Request binding failed %s", err)))
|
handler.Error(c, stacktrace.Propagate(ente.ErrBadRequest, fmt.Sprintf("Request binding failed %s", err)))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
url, err := h.FileDataCtrl.PreviewUploadURL(c, request)
|
resp, err := h.FileDataCtrl.PreviewUploadURL(c, request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
handler.Error(c, stacktrace.Propagate(err, ""))
|
handler.Error(c, stacktrace.Propagate(err, ""))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, resp)
|
||||||
"url": url,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *FileHandler) GetPreviewURL(c *gin.Context) {
|
func (h *FileHandler) GetPreviewURL(c *gin.Context) {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package filedata
|
package filedata
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"github.com/ente-io/museum/ente"
|
"github.com/ente-io/museum/ente"
|
||||||
"github.com/ente-io/museum/ente/filedata"
|
"github.com/ente-io/museum/ente/filedata"
|
||||||
"github.com/ente-io/museum/pkg/utils/auth"
|
"github.com/ente-io/museum/pkg/utils/auth"
|
||||||
@ -31,7 +30,7 @@ func (c *Controller) GetPreviewUrl(ctx *gin.Context, request filedata.GetPreview
|
|||||||
return &enteUrl.URL, nil
|
return &enteUrl.URL, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Controller) PreviewUploadURL(ctx *gin.Context, request filedata.PreviewUploadUrlRequest) (*string, error) {
|
func (c *Controller) PreviewUploadURL(ctx *gin.Context, request filedata.PreviewUploadUrlRequest) (*filedata.PreviewUploadUrl, error) {
|
||||||
if err := request.Validate(); err != nil {
|
if err := request.Validate(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -43,12 +42,16 @@ func (c *Controller) PreviewUploadURL(ctx *gin.Context, request filedata.Preview
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, stacktrace.Propagate(err, "")
|
return nil, stacktrace.Propagate(err, "")
|
||||||
}
|
}
|
||||||
|
id := filedata.NewUploadID(request.Type)
|
||||||
// note: instead of the final url, give a temp url for upload purpose.
|
// note: instead of the final url, give a temp url for upload purpose.
|
||||||
uploadUrl := fmt.Sprintf("%s_temp_upload", filedata.PreviewUrl(request.FileID, fileOwnerID, request.Type))
|
uploadUrl := filedata.CompleteObjectKey(request.FileID, fileOwnerID, request.Type, id)
|
||||||
bucketID := c.S3Config.GetBucketID(request.Type)
|
bucketID := c.S3Config.GetBucketID(request.Type)
|
||||||
enteUrl, err := c.getUploadURL(bucketID, uploadUrl)
|
enteUrl, err := c.getUploadURL(bucketID, uploadUrl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, stacktrace.Propagate(err, "")
|
return nil, stacktrace.Propagate(err, "")
|
||||||
}
|
}
|
||||||
return &enteUrl.URL, nil
|
return &filedata.PreviewUploadUrl{
|
||||||
|
Id: id,
|
||||||
|
Url: enteUrl.URL,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user