如何使用 Golang 将图像上传到 Firebase 存储

在过去的几个小时里,我一直在努力尝试将图像上传到 Firestore 存储,但我无法做到……图像似乎在 Firestore 上已损坏一次


func (fs *FS) Upload(fileInput []byte, fileName string) error {


    ctx, cancel := context.WithTimeout(context.Background(), fs.defaultTransferTimeout)

    defer cancel()


    bucket, err := fs.client.DefaultBucket()

    if err != nil {

        return err

    }


    object := bucket.Object(fileName)

    writer := object.NewWriter(ctx)

    defer writer.Close()


    if _, err := io.Copy(writer, bytes.NewReader(fileInput)); err != nil {

        return err

    }


    if err := object.ACL().Set(context.Background(), storage.AllUsers, storage.RoleReader); err != nil {

        return err

    }


    return nil


}

我没有收到任何错误,但一旦上传......我明白了:

http://img1.mukewang.com/629dcff60001fca703590517.jpg

同时在谷歌云存储上:


http://img1.mukewang.com/629dd00400013ec309990865.jpg

有什么想法吗?



偶然的你
浏览 188回答 2
2回答

慕桂英546537

上传应该没问题。众所周知,Firebase 控制台无法显示不是由网络或移动客户端上传的内容的预览。尝试在本地下载文件以验证它是否与您上传的相同。随时向Firebase 支持提出有关控制台的功能请求。

ABOUTYOU

您需要发送一个额外的元数据属性:firebaseStorageDownloadTokens喜欢:    import (        "github.com/google/uuid"    )    func (fs *FS) Upload(fileInput []byte, fileName string) error {        //create an id        id := uuid.New()         ctx, cancel := context.WithTimeout(context.Background(), fs.defaultTransferTimeout)        defer cancel()            bucket, err := fs.client.DefaultBucket()        if err != nil {            return err        }            object := bucket.Object(fileName)        writer := object.NewWriter(ctx)        //Set the attribute        writer.ObjectAttrs.Metadata = map[string]string{"firebaseStorageDownloadTokens": id.String()}         defer writer.Close()            if _, err := io.Copy(writer, bytes.NewReader(fileInput)); err != nil {            return err        }            if err := object.ACL().Set(context.Background(), storage.AllUsers, storage.RoleReader); err != nil {            return err        }            return nil        }图像应在这些更改后出现。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go