Picture upload

master
Alex 2021-08-01 12:24:17 +02:00
parent b8d956ccb3
commit 08942a6628
4 changed files with 115 additions and 20 deletions

View File

@ -11,9 +11,11 @@ import (
) )
var Conn *amqp.Connection var Conn *amqp.Connection
var MailQueue amqp.Queue
var Channel *amqp.Channel var Channel *amqp.Channel
var MailQueue amqp.Queue
var PictureQueue amqp.Queue
func getConnectionString() string { func getConnectionString() string {
cfg := &config.Cfg.RabbitMq cfg := &config.Cfg.RabbitMq
@ -40,8 +42,8 @@ func Init() {
Channel = ch Channel = ch
log.Debug("RabbitMQ connected") log.Debug("RabbitMQ connected")
/*
q, err := ch.QueueDeclare( mailQueue, err := ch.QueueDeclare(
"mails", // name "mails", // name
false, // durable false, // durable
false, // delete when unused false, // delete when unused
@ -54,16 +56,55 @@ func Init() {
log.Fatalln("Failed to declare a queue", err) log.Fatalln("Failed to declare a queue", err)
} }
MailQueue = q MailQueue = mailQueue */
declareQueue(ch, "mails", &MailQueue)
declareQueue(ch, "pictures", &PictureQueue)
/*
pictureQueue, err := ch.QueueDeclare(
"picture", // name
false, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
nil, // arguments
)
if err != nil {
log.Fatalln("Failed to declare a queue", err)
} }
func Publish(body string) { PictureQueue = pictureQueue */
log.Infoln("qu name", MailQueue.Name) }
log.Infoln("publish", Channel, MailQueue)
func declareQueue(channel *amqp.Channel, name string, queue *amqp.Queue) {
q, err := channel.QueueDeclare(
name, // name
false, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
nil, // arguments
)
if err != nil {
log.Fatalln("Failed to declare a queue", err)
}
log.Debugln("declareQ", q.Name)
*queue = q
log.Infoln("queue", MailQueue)
}
func Publish(queue amqp.Queue, body string) {
log.Infoln("publish queue name", queue.Name)
err := Channel.Publish( err := Channel.Publish(
"", // exchange "", // exchange
MailQueue.Name, // routing key queue.Name, // routing key
false, // mandatory false, // mandatory
false, // immediate false, // immediate
amqp.Publishing{ amqp.Publishing{
@ -85,5 +126,18 @@ func PublishMail(mail string, templateId int, languageId int, bodyData json.RawM
log.Infoln("error reqBody", err) log.Infoln("error reqBody", err)
} }
Publish(string(reqBody)) Publish(MailQueue, string(reqBody))
}
func PublishPicture(pictureMessage structs.RabbitmqPictureMessage) {
//js := structs.RabbitmqPictureMessage{Picture: picture, UserId: userId}
reqBody, err := json.MarshalIndent(&pictureMessage, "", "\t")
if err != nil {
log.Infoln("error reqBody", err)
}
Publish(PictureQueue, string(reqBody))
log.Debugln("rabbitmq publicPicture")
} }

View File

@ -0,0 +1,7 @@
package structs
type RabbitmqPictureMessage struct {
Picture []byte
UserId string
Filename string
}

View File

@ -1,16 +1,21 @@
package picture package picture
import ( import (
"bytes"
"fmt" "fmt"
"io"
"strings" "strings"
"git.umbach.dev/app-idea/rest-api/modules/config"
"git.umbach.dev/app-idea/rest-api/modules/rabbitmq"
"git.umbach.dev/app-idea/rest-api/modules/structs"
"git.umbach.dev/app-idea/rest-api/routers/api/v1/user"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/google/uuid" "github.com/google/uuid"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
func Test(c *fiber.Ctx) error { func Test(c *fiber.Ctx) error {
log.Infoln("header", string(c.Request().Header.ContentType())) log.Infoln("header", string(c.Request().Header.ContentType()))
log.Infoln("formValue", c.FormValue("image")) log.Infoln("formValue", c.FormValue("image"))
@ -22,6 +27,35 @@ func Test(c *fiber.Ctx) error {
return c.SendStatus(fiber.StatusInternalServerError) return c.SendStatus(fiber.StatusInternalServerError)
} }
f, err := file.Open()
if err != nil {
log.Info("err001")
return c.SendStatus(fiber.StatusInternalServerError)
}
defer f.Close()
buf := bytes.NewBuffer(nil)
if _, err := io.Copy(buf, f); err != nil {
log.Info("err002")
return c.SendStatus(fiber.StatusInternalServerError)
}
log.Infoln("bytes", len(buf.Bytes()))
user, err := user.GetUserBySessionId(c.Cookies(config.Cfg.Settings.Cookies.SessionId))
if err != nil {
log.Infoln("err004", err)
return c.SendStatus(fiber.StatusInternalServerError)
}
log.Infoln("userId", user.Id)
rabbitmq.PublishPicture(structs.RabbitmqPictureMessage{Picture: buf.Bytes(), UserId: user.Id, Filename: file.Filename})
filename := strings.Replace(uuid.New().String(), "-", "", -1) filename := strings.Replace(uuid.New().String(), "-", "", -1)
fileExt := strings.Split(file.Filename, ".")[1] fileExt := strings.Split(file.Filename, ".")[1]
image := fmt.Sprintf("%s.%s", filename, fileExt) image := fmt.Sprintf("%s.%s", filename, fileExt)

View File

@ -214,7 +214,7 @@ func userInfos(c *fiber.Ctx, userId string) error {
return c.JSON(&user) return c.JSON(&user)
} }
func getUserBySessionId(sessionId string) (structs.User, error) { func GetUserBySessionId(sessionId string) (structs.User, error) {
db := database.DB db := database.DB
user := structs.User{} user := structs.User{}
userId, err := getUserIdBySessionId(sessionId) userId, err := getUserIdBySessionId(sessionId)
@ -249,7 +249,7 @@ func deleteUser(c *fiber.Ctx) error {
} }
func DeleteUser(c *fiber.Ctx) error { func DeleteUser(c *fiber.Ctx) error {
user, err := getUserBySessionId(c.Cookies(cfg.Settings.Cookies.SessionId)) user, err := GetUserBySessionId(c.Cookies(cfg.Settings.Cookies.SessionId))
if err != nil { if err != nil {
return c.SendStatus(fiber.StatusInternalServerError) return c.SendStatus(fiber.StatusInternalServerError)