.xlsx文件上传到谷歌云存储

我用Go编写了这个API,它使用excelize创建一个.xlsx文件,从数据库中获取的数据,我想上传到私有GCS存储桶。但问题是在我上传文件后,它说文件类型不是 。application/zipapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet


type Connection struct {

    Credential    string

    BucketName    string

    APIKey        string

    ProjectID     string

    AccessToken   string

    BaseURL       string

    GcpCredential *google.Credentials

}


func (conn *Connection) Upload(url, name string) (err error) {

    ctx := context.Background()

    client, err := storage.NewClient(ctx, option.WithCredentialsFile(conn.Credential))

    if err != nil {

        return err

    }


    err = write(client, conn.BucketName, name, url)


    return err

}


func write(client *storage.Client, bucket, object, url string) error {

    ctx := context.Background()

    f, err := os.Open(url)

    if err != nil {

        return err

    }

    defer f.Close()


    wc := client.Bucket(bucket).Object(object).NewWriter(ctx)

    _, err = io.Copy(wc, f)

    if err != nil {

        return err

    }

    if err := wc.Close(); err != nil {

        return err

    }


    return nil

}


//In other file, generate excel file and upload it using above code

xlsx := excelize.NewFile()

//setup file content

...


//save to local machine located in uploadURL

err = xlsx.SaveAs(uploadURL)


//then upload to GCS bucket

err = h.Googlestorage.Upload(uploadURL, fileNameInGCS)

if err != nil {

    SendBadRequest(w, err.Error())

    return

}


//then generate signed URL for client to access the file

这是一个问题,因为当我生成文件的签名URL时,它被下载为.zip文件,而不是.xlsx。


"{file path in bucket}.xlsx?Expires=1617698911&

GoogleAccessId={googleAccessID}&

Signature={someGeneratedSignature}"

如何解决此问题?我上传文件的方式有问题吗?


慕姐8265434
浏览 90回答 1
1回答

长风秋雁

您可以使用 ObjectHandle.Update 函数     _, err := client.Bucket(bucket).Object(object).Update(ctx, storage.ObjectAttrsToUpdate{         ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",     })
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go