首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将.xlsx文件上传到谷歌云存储

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

Stack Overflow用户
提问于 2021-04-06 16:32:13
回答 1查看 292关注 0票数 0

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

代码语言:javascript
复制
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文件下载的。

代码语言:javascript
复制
"{file path in bucket}.xlsx?Expires=1617698911&
GoogleAccessId={googleAccessID}&
Signature={someGeneratedSignature}"

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-06 18:12:05

您可以使用ObjectHandle.Update function

代码语言:javascript
复制
    _, err := client.Bucket(bucket).Object(object).Update(ctx, storage.ObjectAttrsToUpdate{
        ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
    })
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66965217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档