in internal/google/gcs.go [29:81]
func DownloadObject(bucketName string, savePath string, object string) error {
ctx := context.Background()
client, err := storage.NewClient(ctx)
if err != nil {
return fmt.Errorf("failed to create storage client: %w", err)
}
bkt := client.Bucket(bucketName)
obj := bkt.Object(object)
r, err := obj.NewReader(ctx)
if err != nil {
return fmt.Errorf(
"failed to create reader for object %s: %w",
object,
err,
)
}
defer r.Close()
// fileNameParts := strings.Split(object, "/")
// fileName := fileNameParts[len(fileNameParts)-1]
// filePath := filepath.Join(savePath, fileName)
if _, err := os.Stat(savePath); err == nil {
if err := os.Remove(savePath); err != nil {
return fmt.Errorf(
"failed to remove existing file %s: %w",
savePath,
err,
)
}
}
createdFile, err := os.Create(savePath)
if err != nil {
return fmt.Errorf("failed to create file %s: %w", savePath, err)
}
defer createdFile.Close()
if _, err := io.Copy(createdFile, r); err != nil {
return fmt.Errorf(
"failed to copy object %s to file %s: %w",
object,
savePath,
err,
)
}
return nil
}