Compare commits

..

No commits in common. "3a6b24cb571799cceaf84ec80882ce3ad0ebd124" and "018e0b45ed1ce17adacb8fce7e593a4d050b0739" have entirely different histories.

2 changed files with 36 additions and 16 deletions

View file

@ -16,10 +16,14 @@ import (
"stereo.cat/backend/internal/types"
)
func intoReader(buf []byte) io.Reader {
return io.NopCloser(bytes.NewBuffer(buf))
}
func getLengthFromReader(r io.Reader) (io.Reader, int64, error) {
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) {
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()
if err != nil {
c.JSON(500, gin.H{"error": "couldn't open file"})
log.Println(err)
return
}
buf, err := io.ReadAll(fileReader)
if err != nil {
c.JSON(500, gin.H{"error": "couldn't open file"})
log.Println(err)
return
}
fileType, err := filetype.Match(buf)
fileType, err := filetype.MatchReader(fileReader)
if err != nil {
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{
Owner: uid,
CreatedAt: time.Now(),
Size: int64(len(buf)),
Mime: fileType.MIME.Value,
Size: file.Size,
Extension: fileType.Extension,
}
if err := cfg.Database.Create(&fileMeta).Error; err != nil {
@ -77,7 +75,15 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
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 {
c.JSON(500, gin.H{"error": "failed to upload file"})
@ -160,7 +166,21 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
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) {

View file

@ -35,7 +35,7 @@ type File struct {
Owner string `gorm:"not null;index"`
Size int64 `gorm:"not null;type:bigint"`
CreatedAt time.Time `gorm:"autoCreateTime"`
Mime string
Extension string
}
func (f *File) BeforeCreate(tx *gorm.DB) (err error) {