mirror of
https://github.com/ente-io/ente.git
synced 2025-08-07 07:03:35 +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
|
||||
}
|
||||
|
||||
func MustNewID(prefix string) string {
|
||||
id, err := NewID(prefix)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return *id
|
||||
}
|
||||
|
||||
func ServerReqID() string {
|
||||
// Generate a nanoid with a custom alphabet and length of 22
|
||||
id, err := NewID("ser")
|
||||
|
@ -2,6 +2,7 @@ package filedata
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/ente-io/museum/ente"
|
||||
)
|
||||
|
||||
@ -76,6 +77,11 @@ type PreviewUploadUrlRequest struct {
|
||||
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 {
|
||||
if g.Type != ente.PreviewVideo && g.Type != ente.PreviewImage {
|
||||
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 {
|
||||
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))
|
||||
}
|
||||
|
||||
// GetS3FileObjectKey returns the object key for the file data stored in the S3 bucket.
|
||||
func (r *Row) GetS3FileObjectKey() string {
|
||||
if r.Type == ente.PreviewVideo {
|
||||
return previewVideoPath(r.FileID, r.UserID)
|
||||
} else if r.Type == ente.PreviewImage {
|
||||
return previewImagePath(r.FileID, r.UserID)
|
||||
}
|
||||
//if r.Type == ente.PreviewVideo {
|
||||
// return previewVideoPath(r.FileID, r.UserID)
|
||||
//} else if r.Type == ente.PreviewImage {
|
||||
// return previewImagePath(r.FileID, r.UserID)
|
||||
//}
|
||||
panic(fmt.Sprintf("unsupported object type %s", r.Type))
|
||||
}
|
||||
|
@ -2,7 +2,9 @@ package filedata
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"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,
|
||||
@ -13,39 +15,33 @@ func BasePrefix(fileID int64, ownerID int64) string {
|
||||
|
||||
func AllObjects(fileID int64, ownerID int64, oType ente.ObjectType) []string {
|
||||
switch oType {
|
||||
case ente.PreviewVideo:
|
||||
return []string{previewVideoPath(fileID, ownerID), previewVideoPlaylist(fileID, ownerID)}
|
||||
case ente.MlData:
|
||||
return []string{derivedMetaPath(fileID, ownerID)}
|
||||
case ente.PreviewImage:
|
||||
return []string{previewImagePath(fileID, ownerID)}
|
||||
|
||||
default:
|
||||
// throw panic saying current object type is not supported
|
||||
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 {
|
||||
case ente.PreviewVideo:
|
||||
return previewVideoPath(fileID, ownerID)
|
||||
case ente.PreviewImage:
|
||||
return previewImagePath(fileID, ownerID)
|
||||
return fmt.Sprintf("%s%s/%s", BasePrefix(fileID, ownerID), string(oType), id)
|
||||
default:
|
||||
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 {
|
||||
return fmt.Sprintf("%s%s", BasePrefix(fileID, ownerID), string(ente.PreviewVideo))
|
||||
}
|
||||
|
||||
func previewVideoPlaylist(fileID int64, ownerID int64) string {
|
||||
return fmt.Sprintf("%s%s", previewVideoPath(fileID, ownerID), "_playlist.m3u8")
|
||||
}
|
||||
|
||||
func previewImagePath(fileID int64, ownerID int64) string {
|
||||
return fmt.Sprintf("%s%s", BasePrefix(fileID, ownerID), string(ente.PreviewImage))
|
||||
func NewUploadID(oType ente.ObjectType) string {
|
||||
if oType == ente.PreviewVideo {
|
||||
return base.MustNewID("pv")
|
||||
} else if oType == ente.PreviewImage {
|
||||
return base.MustNewID("pi")
|
||||
}
|
||||
panic(fmt.Sprintf("object type %s is not supported", oType))
|
||||
}
|
||||
|
||||
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)))
|
||||
return
|
||||
}
|
||||
url, err := h.FileDataCtrl.PreviewUploadURL(c, request)
|
||||
resp, err := h.FileDataCtrl.PreviewUploadURL(c, request)
|
||||
if err != nil {
|
||||
handler.Error(c, stacktrace.Propagate(err, ""))
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"url": url,
|
||||
})
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
|
||||
func (h *FileHandler) GetPreviewURL(c *gin.Context) {
|
||||
|
@ -1,7 +1,6 @@
|
||||
package filedata
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/ente-io/museum/ente"
|
||||
"github.com/ente-io/museum/ente/filedata"
|
||||
"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
|
||||
}
|
||||
|
||||
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 {
|
||||
return nil, err
|
||||
}
|
||||
@ -43,12 +42,16 @@ func (c *Controller) PreviewUploadURL(ctx *gin.Context, request filedata.Preview
|
||||
if err != nil {
|
||||
return nil, stacktrace.Propagate(err, "")
|
||||
}
|
||||
id := filedata.NewUploadID(request.Type)
|
||||
// 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)
|
||||
enteUrl, err := c.getUploadURL(bucketID, uploadUrl)
|
||||
if err != nil {
|
||||
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