Я попытался вставить CSV-файл с локального компьютера в корзину облачного хранилища, но он сохраняется в виде текстового файла. Когда я попытался включить параметр метаданных в
object := &storage.Object{Name: objectName, Metadata: map[string]string{"Content-Type": "text/csv; charset=utf-8"}}
Он создает еще один слот Content-Type и сохраняет данные, но не меняет значение по умолчанию. Пробовал большинство вариантов от google, но не смог решить эту проблему. Ниже приведен фрагмент кода.
package main
import (
"flag"
"fmt"
"os"
"golang.org/x/net/context"
"golang.org/x/oauth2/google"
storage "google.golang.org/api/storage/v1"
)
const (
// This can be changed to any valid object name.
objectName = "result"
// This scope allows the application full control over resources in Google Cloud Storage
scope = storage.DevstorageFullControlScope
)
var (
projectID = flag.String("project", "phani-1247 ", "Your cloud project ID.")
bucketName = flag.String("bucket", "test-csvstorage", "The name of an existing bucket within your project.")
fileName = flag.String("file", "/home/phanikumar_dytha0/src/phani-1247/master/router/result.csv", "The file to upload.")
)
func main() {
flag.Parse()
client, err := google.DefaultClient(context.Background(), scope)
if err!=nil{
fmt.Printf("error")
}
// Insert an object into a bucket.
object := &storage.Object{Name: objectName, Metadata: map[string]string{"Content-Type": "text/csv; charset=utf-8"}}
file, err := os.Open(*fileName)
if err!=nil{
fmt.Printf("error")
}
service, err := storage.New(client)
if err!=nil{
fmt.Printf("error")
}
if res, err := service.Objects.Insert(*bucketName, object).Media(file).Do(); err == nil {
//fmt.Printf("%v",res,"\n")
fmt.Printf("Created object %v at location %v\n\n", res.Name, res.SelfLink)
} else {
fmt.Printf("Objects.Insert failed: %v", err)
}
}