holy shit i FUCKING HATE golang io.Readers

This commit is contained in:
hexlocation 2025-06-14 19:18:02 +02:00
parent bb52442373
commit f348e7d40f
2 changed files with 16 additions and 36 deletions

View file

@ -16,15 +16,11 @@ import (
"stereo.cat/backend/internal/types"
)
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 intoReader(buf []byte) io.Reader {
return io.NopCloser(bytes.NewBuffer(buf))
}
func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
api.POST("/upload", auth.JwtMiddleware(cfg.JWTSecret), func(c *gin.Context) {
claims := c.MustGet("claims").(jwt.MapClaims)
@ -48,14 +44,20 @@ 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
}
fileType, err := filetype.MatchReader(fileReader)
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)
if err != nil {
c.JSON(500, gin.H{"error": "couldn't open file"})
@ -66,8 +68,8 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
fileMeta := types.File{
Owner: uid,
CreatedAt: time.Now(),
Size: file.Size,
Extension: fileType.Extension,
Size: int64(len(buf)),
Mime: fileType.MIME.Value,
}
if err := cfg.Database.Create(&fileMeta).Error; err != nil {
@ -75,15 +77,7 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
return
}
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})
_, err = cfg.MinioClient.PutObject(cfg.Context, cfg.Bucket, fileMeta.ID.String(), intoReader(buf), fileMeta.Size, minio.PutObjectOptions{ContentType: fileMeta.Mime})
if err != nil {
c.JSON(500, gin.H{"error": "failed to upload file"})
@ -166,21 +160,7 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
return
}
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)
c.DataFromReader(200, file.Size, file.Mime, 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"`
Extension string
Mime string
}
func (f *File) BeforeCreate(tx *gorm.DB) (err error) {