-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfirebase.upload.go
81 lines (65 loc) · 1.75 KB
/
firebase.upload.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// pkg/util/upload.go
package firebase
import (
"context"
"fmt"
"io"
"os"
"sync"
firebase "firebase.google.com/go"
"firebase.google.com/go/storage"
"google.golang.org/api/option"
)
var (
storageClient *storage.Client
wg sync.WaitGroup
)
func InitFirebase() error {
opt := option.WithCredentialsFile("config/firebase/Credentials/school-management-b6bd7-firebase-adminsdk-v1z7j-d7301ecd03.json")
app, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
return fmt.Errorf("error initializing Firebase App: %v", err)
}
client, err := app.Storage(context.Background())
if err != nil {
return fmt.Errorf("error initializing Firebase Storage client: %v", err)
}
storageClient = client
return nil
}
func UploadExcel(uploadControl <-chan struct{}, errorFileUpload chan<- string, filename string) error {
defer wg.Done()
<-uploadControl
fmt.Printf("Uploading file %s\n", filename)
ctx := context.Background()
file, err := os.Open(filename)
if err != nil {
fmt.Printf("Error opening file %s: %v\n", filename, err)
errorFileUpload <- filename
return err
}
defer file.Close()
bucket, err := storageClient.DefaultBucket()
if err != nil {
fmt.Printf("Error getting default bucket: %v\n", err)
errorFileUpload <- filename
return err
}
obj := bucket.Object(filename)
wc := obj.NewWriter(ctx)
if _, err := io.Copy(wc, file); err != nil {
fmt.Printf("Error uploading file to Firebase Storage: %v\n", err)
errorFileUpload <- filename
return err
}
if err := wc.Close(); err != nil {
fmt.Printf("Error closing writer: %v\n", err)
errorFileUpload <- filename
return err
}
fmt.Printf("File %s uploaded successfully\n", filename)
return nil
}
func GetStorageClient() *storage.Client {
return storageClient
}