test upload file to server
This commit is contained in:
parent
16e0e4f9d8
commit
aaa60216b2
43 changed files with 1814 additions and 285 deletions
135
server/tus_server.go
Normal file
135
server/tus_server.go
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"recipe-manager/config"
|
||||
"recipe-manager/data"
|
||||
"recipe-manager/helpers"
|
||||
"recipe-manager/services/logger"
|
||||
"recipe-manager/services/oauth"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
"github.com/tus/tusd/v2/pkg/filestore"
|
||||
tusd "github.com/tus/tusd/v2/pkg/handler"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type TusServer struct {
|
||||
cfg *config.ServerConfig
|
||||
oauth oauth.OAuthService
|
||||
server *http.Server
|
||||
handler *tusd.Handler
|
||||
taoLogger *logger.TaoLogger
|
||||
database *sqlx.DB
|
||||
}
|
||||
|
||||
func NewTusServer(cfg *config.ServerConfig, oauth oauth.OAuthService) *TusServer {
|
||||
|
||||
taoLogger := logger.NewTaoLogger(cfg)
|
||||
taoLogger.Log = taoLogger.Log.Named("TusServer")
|
||||
|
||||
store := filestore.FileStore{
|
||||
Path: "./uploads",
|
||||
}
|
||||
|
||||
composer := tusd.NewStoreComposer()
|
||||
store.UseIn(composer)
|
||||
|
||||
handler, err := tusd.NewHandler(tusd.Config{
|
||||
BasePath: "/files/",
|
||||
StoreComposer: composer,
|
||||
NotifyCompleteUploads: true,
|
||||
Cors: &tusd.CorsConfig{
|
||||
AllowOrigin: regexp.MustCompile(strings.Replace(cfg.AllowedOrigins, ",", "|", -1)),
|
||||
AllowCredentials: true,
|
||||
AllowMethods: tusd.DefaultCorsConfig.AllowMethods,
|
||||
AllowHeaders: tusd.DefaultCorsConfig.AllowHeaders,
|
||||
ExposeHeaders: tusd.DefaultCorsConfig.ExposeHeaders,
|
||||
MaxAge: tusd.DefaultCorsConfig.MaxAge,
|
||||
},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
panic(fmt.Errorf("unable to create handler: %s", err))
|
||||
}
|
||||
|
||||
go func() {
|
||||
for {
|
||||
event := <-handler.CompleteUploads
|
||||
fmt.Printf("Upload %s finished\n", event.Upload.ID)
|
||||
}
|
||||
}()
|
||||
|
||||
return &TusServer{
|
||||
server: &http.Server{Addr: ":" + strconv.Itoa(int(cfg.TusServerPort))},
|
||||
cfg: cfg,
|
||||
handler: handler,
|
||||
taoLogger: taoLogger,
|
||||
oauth: oauth,
|
||||
database: data.NewSqliteDatabase(),
|
||||
}
|
||||
}
|
||||
|
||||
func (ts *TusServer) Run() error {
|
||||
|
||||
mux := http.NewServeMux()
|
||||
|
||||
ts.taoLogger.Log.Info("Server running", zap.String("addr", ts.server.Addr))
|
||||
|
||||
// User Service
|
||||
// userService := user.NewUserService(ts.cfg, ts.database, ts.taoLogger)
|
||||
|
||||
mux.Handle("/files/", http.StripPrefix("/files/", ts.handler))
|
||||
|
||||
mux.HandleFunc("/list", listFiles)
|
||||
|
||||
port := strconv.Itoa(int(ts.cfg.TusServerPort))
|
||||
|
||||
if port == "" {
|
||||
port = "8090"
|
||||
}
|
||||
|
||||
return http.ListenAndServe(":"+strconv.Itoa(int(ts.cfg.TusServerPort)), mux)
|
||||
}
|
||||
|
||||
func (ts *TusServer) Shutdown(ctx context.Context) error {
|
||||
return ts.server.Shutdown(ctx)
|
||||
}
|
||||
|
||||
func listFiles(w http.ResponseWriter, r *http.Request) {
|
||||
// read all file in ./uploads/*.info file
|
||||
// unmarshal json and return the list of files
|
||||
|
||||
// add cors
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
files := helpers.ListFile("./uploads/*.info")
|
||||
|
||||
var result []interface{}
|
||||
|
||||
for _, file := range files {
|
||||
fileContent, err := helpers.ReadFile(file)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
continue
|
||||
}
|
||||
|
||||
var data interface{}
|
||||
|
||||
if err := json.Unmarshal([]byte(fileContent), &data); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
result = append(result, data)
|
||||
}
|
||||
|
||||
json.NewEncoder(w).Encode(result)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue