【问题标题】:google-cloud/storage bucketFile.getSignedUrl connection errorgoogle-cloud/storage bucketFile.getSignedUrl 连接错误
【发布时间】:2020-02-08 22:31:36
【问题描述】:

所以我遇到了与this post 类似的问题。我正在将远程文件 url 上传到 firebase 函数内的存储桶。

但是这个问题只发生在 pdf 类型的文件上。

对于我测试过的其他类型,例如 ms-word、ms-excel、ppt-presentation,上传会发生并成功返回公共 url。

函数 index.js

  const { Storage } = require('@google-cloud/storage'),
  fs = require('fs'), os = require('os'), path = require('path'),

  storage = new Storage({
  projectId: firebaseCredentials.projectId,
  keyFilename: './xxxv-xx.json'
  }),
  bucket = storage.bucket(firebaseCredentials.storageBucket),
  request = require('request').defaults({ encoding: null })

  console.log(`bucket? -> \n ${bucket}`)

  return request.get(incomingMessageData.url, async (error, response, body) => {

  if (!error && response.statusCode == 200) {

  const tempFilePath = path.join(os.tmpdir(), incomingMessageData.file)

  console.log(`tempFilePath -> ${tempFilePath} \n os.tmpdir() -> ${os.tmpdir()}`)

  fs.writeFile(tempFilePath, body, async err => {
  if (err) throw err;
  console.log(`The file has been saved to temp storage! \n 
  Now starting to upload -> ${incomingMessageData.phone}/${incomingMessageData.file}
  `);


  try {

  console.log('inside try catch bucket upload')

      // this approach works
      const bucketFile = bucket.file(`${incomingMessageData.phone}/${incomingMessageData.file}`);
      await bucketFile.save(body)

      console.log('bucket upload finished')

      // the problem is happenning here. It´s throwing generic 'connection error' message that withouth further details is elusive to solve

      let result = await bucketFile.getSignedUrl({
        action: 'read',
        expires: '03-17-2025'
      }), url

      if (result[0].indexOf('http') < 0) {
        console.error('Error getting SignedUrl ', result);
        url = result.toString()
      } else {
        url = result[0]
      }


         let metadata = await bucketFile.getMetadata(),
         size = bytesToSize(metadata[0].size)

         // handle url 
         console.log(`${tempFilePath} uploaded to ${bucket.name}. \n Got 
           uploadUrl? -> ${url}`)

对于 pdf 类型的文件,gcp 日志是这样的

对于其他类型的文件,例如 ms-word,日志显示

【问题讨论】:

  • 这种情况只发生在一个特定的 PDF 文件中,还是全部发生?文件有多大?

标签: google-cloud-functions google-cloud-storage


【解决方案1】:

GC 不知道您正在创建 pdf,因此您必须将文件创建为 PDF。它在这里得到了回答:Create PDF in Firebase Cloud Functions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 2023-03-11
    • 2019-07-11
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2019-05-26
    相关资源
    最近更新 更多