Gofiber
  • Basic backend dengan Gofiber part 1
    • Pengenalan Gofiber
    • Instalasi Gofiber
    • Auto reload dengan air
    • Membaca semua data di struct dengan Gofiber
    • Membaca data spesifik di struct dengan Gofiber
    • Membuat data di struct dengan Gofiber
    • Mengupdate data di struct dengan Gofiber
    • Menghapus data di struct dengan Gofiber
    • Implementasi MVC di Gofiber
  • Basic backend dengan Gofiber part 2
    • Setting database menggunahkan gorm.io di Gofiber
    • Menambahkan query ke database di Gofiber
    • Membuat relasi dengan gorm di Gofiber
    • Membuat validasi dengan validator di Gofiber
    • Membuat CORS di Gofiber
    • Menghandle serangan XSS(Cross-Site Scripting) di Gofiber
    • Mengamankan header HTTP dengan helmet di Gofiber
    • Membuat middleware menggunahkan JWT(JSON Web Token) di Gofiber
    • Menambahkan query search di Gofiber
    • Menambahkan query sort di Gofiber
    • Membuat pagination di Gofiber
    • Membuat refresh token di Gofiber
    • Membuat local upload file di Gofiber
    • Membuat server upload dengan cloudinary di Gofiber
    • Membuat analisis code dengan GolangCI-Lint di Gofiber
Powered by GitBook
On this page
  1. Basic backend dengan Gofiber part 2

Membuat server upload dengan cloudinary di Gofiber

PreviousMembuat local upload file di GofiberNextMembuat analisis code dengan GolangCI-Lint di Gofiber

Last updated 1 year ago

Langkah-langkah Implementasi Upload File ke Cloudinary

  1. Tambahkan cloudinary-go ke dalam proyek:

    • Install package cloudinary-go dengan menjalankan perintah:

      go get github.com/cloudinary/cloudinary-go
  2. Buat Helper untuk Upload File ke Cloudinary:

    • Buat file cloudinary.go di dalam direktori services untuk menangani proses upload file ke Cloudinary.

    // src/services/cloudinary.go
    
    package services
    
    import (
        "fmt"
        "mime/multipart"
        "os"
        "path/filepath"
        "time"
    
        "github.com/cloudinary/cloudinary-go"
        "github.com/cloudinary/cloudinary-go/api/uploader"
        "github.com/gofiber/fiber/v2"
    )
    
    func UploadCloudinary(c *fiber.Ctx, file *multipart.FileHeader) (*uploader.UploadResult, error) {
        // Menginisialisasi konfigurasi Cloudinary
        cloudinaryURL := os.Getenv("CLOUDINARY_URL")
        if cloudinaryURL == "" {
            return nil, fiber.NewError(fiber.StatusInternalServerError, "Cloudinary URL not found")
        }
    
        cld, err := cloudinary.NewFromURL(cloudinaryURL)
        if err != nil {
            return nil, fiber.NewError(fiber.StatusInternalServerError, err.Error())
        }
    
        // Membuka file
        src, err := file.Open()
        if err != nil {
            return nil, fiber.NewError(fiber.StatusInternalServerError, err.Error())
        }
        defer src.Close()
    
        // Menghapus ekstensi dari file.Filename
        ext := filepath.Ext(file.Filename)
        fileNameWithoutExt := file.Filename[:len(file.Filename)-len(ext)]
    
        // Konfigurasi uploader Cloudinary
        uploadParams := uploader.UploadParams{
            PublicID:  fmt.Sprintf("%d_%s", time.Now().Unix(), fileNameWithoutExt),
            Overwrite: true,
        }
    
        // Mengunggah file ke Cloudinary
        uploadResult, err := cld.Upload.Upload(c.Context(), src, uploadParams)
        if err != nil {
            return nil, fiber.NewError(fiber.StatusInternalServerError, err.Error())
        }
    
        return uploadResult, nil
    }
  3. Buat Controller untuk Mengelola Upload File ke Cloudinary:

    • Buat fungsi UploadFileServer di ProductController untuk menangani permintaan upload file ke Cloudinary.

    // src/controllers/ProductController.go
    
    package controllers
    
    import (
        "gofiber/src/helpers"
        "gofiber/src/services"
        "github.com/gofiber/fiber/v2"
    )
    
    func UploadFileServer(c *fiber.Ctx) error {
        // Ambil file dari form
        file, err := c.FormFile("file")
        if err != nil {
            return c.Status(fiber.StatusBadRequest).SendString("Gagal mengunggah file: " + err.Error())
        }
    
        // Validasi ukuran file (maksimal 2MB)
        maxFileSize := int64(2 << 20) // 2MB
        if err := helpers.SizeUploadValidation(file.Size, maxFileSize); err != nil {
            return err
        }
    
        // Baca sebagian dari file untuk validasi tipe
        fileHeader, err := file.Open()
        if err != nil {
            return c.Status(fiber.StatusInternalServerError).SendString("Gagal membuka file: " + err.Error())
        }
        defer fileHeader.Close()
    
        buffer := make([]byte, 512)
        if _, err := fileHeader.Read(buffer); err != nil {
            return c.Status(fiber.StatusInternalServerError).SendString("Gagal membaca file: " + err.Error())
        }
    
        // Validasi tipe file
        validFileTypes := []string{"image/png", "image/jpeg", "image/jpg", "application/pdf"}
        if err := helpers.TypeUploadValidation(buffer, validFileTypes); err != nil {
            return err
        }
    
        // Unggah file ke Cloudinary
        uploadResult, err := services.UploadCloudinary(c, file)
        if err != nil {
            return c.Status(fiber.StatusInternalServerError).SendString(err.Error())
        }
        return c.JSON(uploadResult)
    }
  4. Tambahkan Route untuk Upload File:

    • Tambahkan route baru untuk mengupload file di file routes/main.go.

    // src/routes/main.go
    
    package routes
    
    import (
        "gofiber/src/controllers"
        "gofiber/src/middlewares"
    
        "github.com/gofiber/fiber/v2"
    )
    
    func Router(app *fiber.App) {
        // Product routes
        app.Get("/products", controllers.GetAllProducts)
        app.Get("/product/:id", controllers.GetProductById)
        app.Post("/product", controllers.CreateProduct)
        app.Put("/product/:id", controllers.UpdateProduct)
        app.Delete("/product/:id", controllers.DeleteProduct)
        app.Post("/upload", controllers.UploadFile)
        app.Post("/uploadServer", controllers.UploadFileServer)
    
        // Category routes
        app.Get("/categories", middlewares.JwtMiddleware(), controllers.GetAllCategories)
        app.Get("/category/:id", controllers.GetCategoryById)
        app.Post("/category", controllers.CreateCategory)
        app.Put("/category/:id", controllers.UpdateCategory)
        app.Delete("/category/:id", controllers.DeleteCategory)
    
        // User Routes
        app.Post("/register", controllers.RegisterUser)
        app.Post("/login", controllers.LoginUser)
        app.Post("/refreshToken", controllers.RefreshToken)
    }
  5. Konfigurasi Variabel Lingkungan untuk Cloudinary:

    • Untuk mendapatkan api_key , api_secret, dan cloud_name kunjungi website resmi kemudian tambahkan variabel CLOUDINARY_URL di file .env dengan nilai yang sesuai dengan kredensial Cloudinary Anda.

    CLOUDINARY_URL=cloudinary://<api_key>:<api_secret>@<cloud_name>

Dengan langkah-langkah di atas, Anda telah berhasil mengimplementasikan fitur upload file ke Cloudinary dalam aplikasi Anda menggunakan Fiber dan Golang.

cloudinary
GitHub - zakimaliki/basic_gofiber_part_1 at 925cfec079ab6198efa1666a71df1ffbaccbf1abGitHub
Logo