func DownloadObject()

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
}