【问题标题】:How to upload image to firebase storage using Golang如何使用 Golang 将图像上传到 Firebase 存储
【发布时间】:2020-09-25 03:54:23
【问题描述】:

在过去的几个小时里,我一直在努力尝试将图像上传到 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

}

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

同时在 Google Cloud Storage 上:

有什么想法吗?

【问题讨论】:

标签: image firebase go google-cloud-storage firebase-storage


【解决方案1】:

上传可能没问题。众所周知,Firebase 控制台无法显示不是由网络或移动客户端上传的内容的预览。尝试在本地下载文件以验证它是否与您上传的相同。

也欢迎file a feature request with Firebase support 了解控制台。

【讨论】:

    【解决方案2】:

    您需要发送一个额外的元数据属性: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
        
        }
    

    图像应在这些更改后出现。

    【讨论】:

      猜你喜欢
      • 2017-03-27
      • 2021-07-30
      • 2017-09-25
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多