holy shit i FUCKING HATE golang io.Readers
This commit is contained in:
parent
bb52442373
commit
f348e7d40f
2 changed files with 16 additions and 36 deletions
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue