add upload file extension

This commit is contained in:
harold 2025-03-05 19:59:28 +05:00
parent 2650c69995
commit ee252638cb
5 changed files with 29 additions and 13 deletions

View File

@ -5,6 +5,7 @@ import (
"io" "io"
"mime/multipart" "mime/multipart"
"os" "os"
"strconv"
) )
type LocalStorage struct { type LocalStorage struct {
@ -30,20 +31,28 @@ func (ls *LocalStorage) Upload(
file *multipart.FileHeader, file *multipart.FileHeader,
streamerID int, streamerID int,
) error { ) error {
f, err := os.Create(ls.basePath + "/" + string(rune(streamerID)) + "/" + file.Filename) dirPath := ls.basePath + "/" + strconv.Itoa(streamerID)
if _, err := os.Stat(dirPath); os.IsNotExist(err) {
if err := os.MkdirAll(dirPath, os.ModePerm); err != nil {
return err
}
}
f, err := os.Create(dirPath + "/" + file.Filename)
if err != nil { if err != nil {
return err return err
} }
defer f.Close() defer f.Close()
// Открываем файл из multipart.FileHeader // Открываем загруженный файл
srcFile, err := file.Open() srcFile, err := file.Open()
if err != nil { if err != nil {
return err return err
} }
defer srcFile.Close() defer srcFile.Close()
// Копируем содержимое из исходного файла в новый файл // Копируем содержимое в новый файл
_, err = io.Copy(f, srcFile) _, err = io.Copy(f, srcFile)
if err != nil { if err != nil {
return err return err

View File

@ -8,7 +8,7 @@ type File struct {
ID string `json:"id"` ID string `json:"id"`
FileName string `json:"file_name"` FileName string `json:"file_name"`
Extension string `json:"extension"` Extension string `json:"extension"`
Type string `json:"type"` FileType string `json:"file_type"`
} }
type Widget struct { type Widget struct {

View File

@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS widgets (
CREATE TABLE IF NOT EXISTS files ( CREATE TABLE IF NOT EXISTS files (
id UUID NOT NULL PRIMARY KEY DEFAULT uuid_generate_v4(), id UUID NOT NULL PRIMARY KEY DEFAULT uuid_generate_v4(),
file_type VARCHAR(15) NOT NOT NULL, file_type VARCHAR(15) NOT NULL,
extension VARCHAR(10) NOT NULL, extension VARCHAR(10) NOT NULL,
streamer_id INTEGER NOT NULL, streamer_id INTEGER NOT NULL,
created_at TIMESTAMP DEFAULT now() created_at TIMESTAMP DEFAULT now()

View File

@ -4,6 +4,8 @@ import (
"context" "context"
"donat-widget/internal/model" "donat-widget/internal/model"
"donat-widget/internal/model/sql" "donat-widget/internal/model/sql"
"fmt"
"github.com/google/uuid"
"github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5"
"mime/multipart" "mime/multipart"
) )
@ -35,19 +37,23 @@ func (fileRepo *RepoFile) AddNew(
"file_type": fileType, "file_type": fileType,
"extension": extension, "extension": extension,
} }
fileID, err := fileRepo.db.Insert(ctx, sql.AddNewFile, args)
fileIDRaw, err := fileRepo.db.Insert(ctx, sql.AddNewFile, args)
if err != nil { if err != nil {
return "", err return "", err
} }
err = fileRepo.storage.Upload( fileIDBytes, ok := fileIDRaw.([16]uint8)
&file, if !ok {
streamerID, return "", fmt.Errorf("unexpected fileID type: %T", fileIDRaw)
) }
fileID := uuid.UUID(fileIDBytes).String()
err = fileRepo.storage.Upload(&file, streamerID)
if err != nil { if err != nil {
return "", err return "", err
} }
return fileID.(string), nil
return fileID, nil
} }

View File

@ -3,8 +3,9 @@ CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- Create tables -- Create tables
CREATE TABLE IF NOT EXISTS files ( CREATE TABLE IF NOT EXISTS files (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), id UUID NOT NULL PRIMARY KEY DEFAULT uuid_generate_v4(),
type VARCHAR(15) NOT NULL, file_type VARCHAR(15) NOT NULL,
file_name VARCHAR(50) NOT NULL,
extension VARCHAR(10) NOT NULL, extension VARCHAR(10) NOT NULL,
streamer_id INTEGER NOT NULL, streamer_id INTEGER NOT NULL,
created_at TIMESTAMP DEFAULT now() created_at TIMESTAMP DEFAULT now()