supabasestorageuploader

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 27, 2023 License: MIT Imports: 10 Imported by: 2

README

Supabase Storage Uploader

Tujuan untuk mengupload file ke supabase storage via golang dengan bantuan API dari javascript

Cara Penggunaan

Download ekstensi

go get github.com/adityarizkyramadhan/supabase-storage-uploader

Peraturan

  • Jika ingin menggunakan package ini, pastikan anda sudah membuat bucket di supabase storage
  • Jika ada kesalahan atau bug bisa menghubungi saya atau bikin issues pada repository ini
  • Jika ingin berkontribusi silahkan fork repository ini dan buat pull request

Update New Version

  • v0.0.1 => Add upload file
  • v0.0.2 => Untuk membuat code yang lebih muda dibaca agar dapat dipergunakan lebih simple
  • v0.0.3 => Add delete file
Versi Terbaru
  • v1.0.0 => Menggunakan API official dari supabase, menambahkan list bucket, dan mengubah struktur code
package main

import (
	supabasestorageuploader "github.com/adityarizkyramadhan/supabase-storage-uploader"
	"github.com/fatih/color"
	"github.com/gin-gonic/gin"
	"log"
)

func main() {
	r := gin.Default()

	// Buat Client
	supClient := supabasestorageuploader.New(
		"https://your-unique-url.supabase.co",
		"your-token",
		"your-bucket-name",
	)

	r.POST("/upload/v2", func(c *gin.Context) {
		file, err := c.FormFile("avatar")
		if err != nil {
			c.JSON(400, gin.H{"data": err.Error()})
			return
		}
		link, err := supClient.Upload(file)
		if err != nil {
			c.JSON(500, gin.H{"data": err.Error()})
			return
		}
		c.JSON(200, gin.H{"data": link})
	})

	r.GET("/list", func(c *gin.Context) {
		list, err := supClient.ListBucket(
			&supabasestorageuploader.RequestBodyListBucket{
				Limit:  10,
				Offset: 0,
				SortBy: struct {
					Column string `json:"column"`
					Order  string `json:"order"`
				}{
					Column: "name",
					Order:  "asc",
				},
			},
		)
		if err != nil {
			c.JSON(500, gin.H{"data": err.Error()})
			return
		}
		c.JSON(200, gin.H{"data": list})
	})

	r.DELETE("/delete", func(c *gin.Context) {
		// get body from request
		var requestBody map[string]string
		err := c.BindJSON(&requestBody)
		if err != nil {
			c.JSON(400, gin.H{"data": err.Error()})
			return
		}
		err = supClient.Delete(requestBody["link"])
		if err != nil {
			c.JSON(500, gin.H{"data": err.Error()})
			return
		}
		c.JSON(200, gin.H{"data": "success"})
	})
	log.Printf("Server running at %v\n", color.GreenString("http://localhost:8080"))
	err := r.Run(":8080")
	if err != nil {
		return
	}
}

Jika ada kesalahan atau bug bisa menghubungi saya atau bikin issues pada repository ini

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrFileNotFound     = errors.New("fileHeader is null")
	ErrFileNotInStorage = errors.New("file not found, check your storage name, file path, and file name")
	ErrLinkNotFound     = errors.New("file not found, check your storage name, file path, file name, and policy")
	ErrBadRequest       = errors.New("received bad request, check your request body")
)

Functions

This section is empty.

Types

type Client added in v1.0.0

type Client struct {
	// contains filtered or unexported fields
}

func New added in v1.0.0

func New(
	projectUrl string,
	token string,
	bucketName string,
) *Client

func (*Client) Delete added in v1.0.0

func (c *Client) Delete(link string) error

func (*Client) ListBucket added in v1.0.0

func (c *Client) ListBucket(requestBody *RequestBodyListBucket) (*ResponseListBucket, error)

func (*Client) Upload added in v1.0.0

func (c *Client) Upload(fileHeader *multipart.FileHeader) (string, error)

type RequestBodyListBucket added in v1.0.0

type RequestBodyListBucket struct {
	Prefix string `json:"prefix"`
	Limit  int    `json:"limit"`
	Offset int    `json:"offset"`
	SortBy struct {
		Column string `json:"column"`
		Order  string `json:"order"`
	} `json:"sortBy"`
	Search string `json:"search"`
}

type ResponseListBucket added in v1.0.0

type ResponseListBucket []struct {
	Name           string    `json:"name"`
	ID             string    `json:"id"`
	UpdatedAt      time.Time `json:"updated_at"`
	CreatedAt      time.Time `json:"created_at"`
	LastAccessedAt time.Time `json:"last_accessed_at"`
	Metadata       struct {
		CacheControl   string    `json:"cacheControl"`
		ContentLength  int       `json:"contentLength"`
		ETag           string    `json:"eTag"`
		HTTPStatusCode int       `json:"httpStatusCode"`
		LastModified   time.Time `json:"lastModified"`
		Mimetype       string    `json:"mimetype"`
		Size           int       `json:"size"`
	} `json:"metadata"`
}

Directories

Path Synopsis
docs

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL