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"
"mime/multipart"
"os"
"strconv"
)
type LocalStorage struct {
@ -30,20 +31,28 @@ func (ls *LocalStorage) Upload(
file *multipart.FileHeader,
streamerID int,
) 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 {
return err
}
defer f.Close()
// Открываем файл из multipart.FileHeader
// Открываем загруженный файл
srcFile, err := file.Open()
if err != nil {
return err
}
defer srcFile.Close()
// Копируем содержимое из исходного файла в новый файл
// Копируем содержимое в новый файл
_, err = io.Copy(f, srcFile)
if err != nil {
return err

View File

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

View File

@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS widgets (
CREATE TABLE IF NOT EXISTS files (
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,
streamer_id INTEGER NOT NULL,
created_at TIMESTAMP DEFAULT now()

View File

@ -4,6 +4,8 @@ import (
"context"
"donat-widget/internal/model"
"donat-widget/internal/model/sql"
"fmt"
"github.com/google/uuid"
"github.com/jackc/pgx/v5"
"mime/multipart"
)
@ -35,19 +37,23 @@ func (fileRepo *RepoFile) AddNew(
"file_type": fileType,
"extension": extension,
}
fileID, err := fileRepo.db.Insert(ctx, sql.AddNewFile, args)
fileIDRaw, err := fileRepo.db.Insert(ctx, sql.AddNewFile, args)
if err != nil {
return "", err
}
err = fileRepo.storage.Upload(
&file,
streamerID,
)
fileIDBytes, ok := fileIDRaw.([16]uint8)
if !ok {
return "", fmt.Errorf("unexpected fileID type: %T", fileIDRaw)
}
fileID := uuid.UUID(fileIDBytes).String()
err = fileRepo.storage.Upload(&file, streamerID)
if err != nil {
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 TABLE IF NOT EXISTS files (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
type VARCHAR(15) NOT NULL,
id UUID NOT NULL PRIMARY KEY DEFAULT uuid_generate_v4(),
file_type VARCHAR(15) NOT NULL,
file_name VARCHAR(50) NOT NULL,
extension VARCHAR(10) NOT NULL,
streamer_id INTEGER NOT NULL,
created_at TIMESTAMP DEFAULT now()