Compare commits
No commits in common. "3a6b24cb571799cceaf84ec80882ce3ad0ebd124" and "018e0b45ed1ce17adacb8fce7e593a4d050b0739" have entirely different histories.
3a6b24cb57
...
018e0b45ed
2 changed files with 36 additions and 16 deletions
|
@ -16,10 +16,14 @@ import (
|
||||||
"stereo.cat/backend/internal/types"
|
"stereo.cat/backend/internal/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
func intoReader(buf []byte) io.Reader {
|
func getLengthFromReader(r io.Reader) (io.Reader, int64, error) {
|
||||||
return io.NopCloser(bytes.NewBuffer(buf))
|
buf, err := io.ReadAll(r)
|
||||||
}
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return io.NopCloser(bytes.NewBuffer(buf)), int64(len(buf)), nil
|
||||||
|
}
|
||||||
|
|
||||||
func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
|
func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
|
||||||
api.POST("/upload", auth.JwtMiddleware(cfg.JWTSecret), func(c *gin.Context) {
|
api.POST("/upload", auth.JwtMiddleware(cfg.JWTSecret), func(c *gin.Context) {
|
||||||
|
@ -44,20 +48,14 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fileReader, err := file.Open()
|
fileReader, err := file.Open()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{"error": "couldn't open file"})
|
c.JSON(500, gin.H{"error": "couldn't open file"})
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
buf, err := io.ReadAll(fileReader)
|
fileType, err := filetype.MatchReader(fileReader)
|
||||||
if err != nil {
|
|
||||||
c.JSON(500, gin.H{"error": "couldn't open file"})
|
|
||||||
log.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
fileType, err := filetype.Match(buf)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{"error": "couldn't open file"})
|
c.JSON(500, gin.H{"error": "couldn't open file"})
|
||||||
|
@ -68,8 +66,8 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
|
||||||
fileMeta := types.File{
|
fileMeta := types.File{
|
||||||
Owner: uid,
|
Owner: uid,
|
||||||
CreatedAt: time.Now(),
|
CreatedAt: time.Now(),
|
||||||
Size: int64(len(buf)),
|
Size: file.Size,
|
||||||
Mime: fileType.MIME.Value,
|
Extension: fileType.Extension,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cfg.Database.Create(&fileMeta).Error; err != nil {
|
if err := cfg.Database.Create(&fileMeta).Error; err != nil {
|
||||||
|
@ -77,7 +75,15 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = cfg.MinioClient.PutObject(cfg.Context, cfg.Bucket, fileMeta.ID.String(), intoReader(buf), fileMeta.Size, minio.PutObjectOptions{ContentType: fileMeta.Mime})
|
newReader, length, err := getLengthFromReader(fileReader)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(500, gin.H{"error": "couldn't open file"})
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = cfg.MinioClient.PutObject(cfg.Context, cfg.Bucket, fileMeta.ID.String(), newReader, length, minio.PutObjectOptions{ContentType: fileType.MIME.Value})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{"error": "failed to upload file"})
|
c.JSON(500, gin.H{"error": "failed to upload file"})
|
||||||
|
@ -160,7 +166,21 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
c.DataFromReader(200, file.Size, file.Mime, object, nil)
|
stat, err := object.Stat()
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(500, gin.H{"error": "failed to retrieve file"})
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fileType := filetype.GetType(file.Extension)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(500, gin.H{"error": "failed to retrieve file"})
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.DataFromReader(200, stat.Size, fileType.MIME.Value, object, nil)
|
||||||
})
|
})
|
||||||
|
|
||||||
api.GET("/list", auth.JwtMiddleware(cfg.JWTSecret), func(c *gin.Context) {
|
api.GET("/list", auth.JwtMiddleware(cfg.JWTSecret), func(c *gin.Context) {
|
||||||
|
|
|
@ -35,7 +35,7 @@ type File struct {
|
||||||
Owner string `gorm:"not null;index"`
|
Owner string `gorm:"not null;index"`
|
||||||
Size int64 `gorm:"not null;type:bigint"`
|
Size int64 `gorm:"not null;type:bigint"`
|
||||||
CreatedAt time.Time `gorm:"autoCreateTime"`
|
CreatedAt time.Time `gorm:"autoCreateTime"`
|
||||||
Mime string
|
Extension string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *File) BeforeCreate(tx *gorm.DB) (err error) {
|
func (f *File) BeforeCreate(tx *gorm.DB) (err error) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue