add upload file extension
This commit is contained in:
parent
2650c69995
commit
ee252638cb
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user