Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用google cloud和node js从firebase存储中检索图像并将其显示在网页上_Javascript_Node.js_Firebase_Firebase Storage - Fatal编程技术网

Javascript 如何使用google cloud和node js从firebase存储中检索图像并将其显示在网页上

Javascript 如何使用google cloud和node js从firebase存储中检索图像并将其显示在网页上,javascript,node.js,firebase,firebase-storage,Javascript,Node.js,Firebase,Firebase Storage,我将图像存储在firebase存储中,现在我想将其显示在我的页面上 const firebase = require('./../config/firebase'); const gcloud = require('google-cloud'); const fs = require('fs'); var storage = gcloud.storage({ projectId: 'test-a1e76', keyFilename: 'test-a1e76-firebase-adminsdk-

我将图像存储在firebase存储中,现在我想将其显示在我的页面上

const firebase = require('./../config/firebase');
const gcloud = require('google-cloud');
const fs = require('fs');

var storage = gcloud.storage({
projectId: 'test-a1e76',
keyFilename: 'test-a1e76-firebase-adminsdk-7111d-124guy123eac.json',
});

var bucket = storage.bucket('test-a1e76.appspot.com');
我的设置就是这样的

这是我的get方法

router.get('/image', function (req,res) {

    var remoteReadStream = bucket.file('download.png').createReadStream();
    var localWriteStream = fs.createWriteStream('/images/watchers/2jIompF9FUZ6A4LnpBcbpHWw8dx2/download.png');
    var ss = remoteReadStream.pipe(localWriteStream);
    res.send(ss);
})
我只是尝试了一下,因为它是写在谷歌云计算的npm文档上的。 我试着把它放在get方法中,看看它是如何工作的

在那之后我犯了这个错误

Error: ENOENT: no such file or directory, open 'C:\images\test\2jIoasd24zd13ase121s2Ww8dx2\download.png'
这是我的ajaxget方法

 $.ajax({
    url:'/user/image',
    type:'GET',
    success:function(data){
      console.log(data.path);

    }
  });

这里是否有人可以指导我如何从firebase存储中检索图像并将其显示在我的网页上?。使用谷歌云npm?因为我读到一些帖子说node js不支持firebase存储,所以他们改用google cloud。

你只需要显示图像,对吗?有一种肮脏的方式

1-在你的bucket上上传一张图片,点击它(在Firebase控制台中)

2-屏幕右侧显示有关文件的信息

3-查找“下载Url”(或类似的内容)并单击它

4-这是一个url示例:

如您所见,有一种模式:

获取您的令牌,现在您可以显示bucket上的所有图像,只需传递文件名和令牌(如本例所示)

这是因为Firebase为您的服务提供了RESTAPI

记住:在设置开放规则之前进行身份验证

示例:每个人都能阅读。只有身份验证用户才能写入。

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read: if request.auth == null;
      allow write: if request.auth != null;
    }
  }
}

在带有节点的firebase函数中,我使用了下面的代码,它工作得非常好


我是这样工作的

var admin=require(“firebase admin”);
...
app.get('/picture',异步(req,res)=>{
const fileRef=admin.storage().bucket().file('03aead66e97f0d50ce549b6fffc1b6d7.svg');
const hash=await fileRef.download()
res.contentType(fileRef.metadata.contentType);
res.end(散列[0],'binary');
});
const uuidv4 = require('uuid/v4');
const uuid = uuidv4();

    const os = require('os')
    const path = require('path')
    const cors = require('cors')({ origin: true })
    const Busboy = require('busboy')
    const fs = require('fs')
    var admin = require("firebase-admin");


    var serviceAccount = {
        "type": "service_account",
        "project_id": "xxxxxx",
        "private_key_id": "xxxxxx",
        "private_key": "-----BEGIN PRIVATE KEY-----\jr5x+4AvctKLonBafg\nElTg3Cj7pAEbUfIO9I44zZ8=\n-----END PRIVATE KEY-----\n",
        "client_email": "xxxx@xxxx.iam.gserviceaccount.com",
        "client_id": "xxxxxxxx",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-5rmdm%40xxxxx.iam.gserviceaccount.com"
      }

    admin.initializeApp({
        credential: admin.credential.cert(serviceAccount),
        storageBucket: "xxxxx-xxxx" // use your storage bucket name
    });


    const app = express();
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(bodyParser.json());
app.post('/uploadFile', (req, response) => {
    response.set('Access-Control-Allow-Origin', '*');
    const busboy = new Busboy({ headers: req.headers })
    let uploadData = null
    busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
        const filepath = path.join(os.tmpdir(), filename)
        uploadData = { file: filepath, type: mimetype }
        console.log("-------------->>",filepath)
        file.pipe(fs.createWriteStream(filepath))
      })

      busboy.on('finish', () => {
        const bucket = admin.storage().bucket();
        bucket.upload(uploadData.file, {
            uploadType: 'media',
            metadata: {
              metadata: { firebaseStorageDownloadTokens: uuid,
                contentType: uploadData.type,
              },
            },
          })

          .catch(err => {
            res.status(500).json({
              error: err,
            })
          })
      })
      busboy.end(req.rawBody)
   });




exports.widgets = functions.https.onRequest(app);