在firebase的resize扩展完成后获取下载URL

oyjwcjzk  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(146)

这就是我试图实现的,实现firebase的resize图像扩展,上传图像,然后当resize完成时,将dowloadUrl的thumbs添加到Cloud Firestore文档。这个question帮助我,但仍然无法识别thumbs并获得下载URL,这是我迄今为止一直在尝试的。
注意:我将缩略图设置为root/thumbs

const functions = require('firebase-functions');
const { Storage } = require('@google-cloud/storage');
const storage = new Storage();

exports.thumbsUrl = functions.storage.object().onFinalize(async object => {
    const fileBucket = object.bucket;
    const filePath = object.name;
    const contentType = object.contentType;
    if (fileBucket && filePath && contentType) {
        console.log('Complete data');
         if (!contentType.startsWith('thumbs/')) {
             console.log('This is not a thumbnails');
             return true;
         }
         console.log('This is a thumbnails');

    } else {
        console.log('Incomplete data');
        return null;
    }
});

字符串

e7arh2l6

e7arh2l61#

方法一:客户端

  • 创建缩略图时不要更改access token
  • 从gcloud云函数控制台编辑函数
  • 通过单击detailed usage stats转到函数代码
  • 然后点击代码
  • 编辑以下行
  • 再次重新部署函数
// If the original image has a download token, add a
        // new token to the image being resized #323
        if (metadata.metadata.firebaseStorageDownloadTokens) {
            // metadata.metadata.firebaseStorageDownloadTokens = uuidv4_1.uuid();
        }

字符串

  • 使用getDownloadURL函数获取上传的图像
https://firebasestorage.googleapis.com/v0/b/<project_id>/o/<FolderName>%2F<Filename>.jpg?alt=media&token=xxxxxx-xxx-xxx-xxx-xxxxxxxxxxxxx

  • 因为访问令牌将类似于
https://firebasestorage.googleapis.com/v0/b/<project_id>/o/<FolderName>%2Fthumbnails%2F<Filename>_300x300.jpg?alt=media&token=xxxxxx-xxx-xxx-xxx-xxxxxxxxxxxxx

方法二:服务器端

创建缩略图后调用此函数

var storage = firebase.storage();
    var pathReference = storage.ref('users/' + userId + '/avatar.jpg');
    pathReference.getDownloadURL().then(function (url) {
        $("#large-avatar").attr('src', url);
    }).catch(function (error) {
        // Handle any errors
    });

jw5wzhpr

jw5wzhpr2#

我在一些项目中遇到过类似的问题,我找到的解决方案如下:
1.定义文件路径。
1.根据扩展配置建立调整大小的文件路径。
1.上传图像。
1.添加6秒延迟以允许扩展工作。
1.利用调整大小的图像路径获取下载URL。

endCrop(){
const file:any = this.croppedImage.split(',')[1];
let filePath = 'shop_img/' + this.auth.User.authid + '/' + 'imgname.png';
let resizePath = 'shop_img/' + this.auth.User.authid + '/' +'imgname_600x600.png';

this.storage.uploadImage(file, filePath).then(async urlorigem =>{
  await this.delay(6000); //delay of 6s
    this.storage.storage.ref(resizePath).getDownloadURL().subscribe(url =>{
      this.croppedImage = url; //got url from resized image
    })
 })

字符串
}

fv2wmkja

fv2wmkja3#

你需要使用filePath来检查thumbs if(filePath.startswith('thumbs/'){...}
contentType有文件的元数据,如图像类型等。FilePath将有完整的路径。

相关问题