【发布时间】: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