Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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
Google cloud platform 谷歌云函数返回未定义的bucket finalize缓冲区。无法调试代码_Google Cloud Platform_Google Cloud Functions_Google Cloud Storage_Buffer_Cfreadstream - Fatal编程技术网

Google cloud platform 谷歌云函数返回未定义的bucket finalize缓冲区。无法调试代码

Google cloud platform 谷歌云函数返回未定义的bucket finalize缓冲区。无法调试代码,google-cloud-platform,google-cloud-functions,google-cloud-storage,buffer,cfreadstream,Google Cloud Platform,Google Cloud Functions,Google Cloud Storage,Buffer,Cfreadstream,我正在尝试使用GCF处理.csv文件。 文件ist从另一个bucket传输到这个bucket,我试图使用事件(finalize)读取该文件。(我还需要格式化此文件上的数据结构,这就是为什么我首先需要读取缓冲区) 在本地环境中手动定义文件时,代码工作得非常好,但当我切换到使用事件在GCF中运行它时,它会无错误地退出。只需忽略下面代码中的调试日志。(它在“console.log(“error found”)”上停止,因此我认为,readstream从未正确创建过。) 代码如下: const{Stor

我正在尝试使用GCF处理.csv文件。 文件ist从另一个bucket传输到这个bucket,我试图使用事件(finalize)读取该文件。(我还需要格式化此文件上的数据结构,这就是为什么我首先需要读取缓冲区)

在本地环境中手动定义文件时,代码工作得非常好,但当我切换到使用事件在GCF中运行它时,它会无错误地退出。只需忽略下面代码中的调试日志。(它在“console.log(“error found”)”上停止,因此我认为,readstream从未正确创建过。)

代码如下:

const{Storage}=require('@googlecloud/Storage');
const Papa=require('papaparse');
恒力矩=要求的(‘力矩’);
const{BigQuery}=require('@googlecloud/BigQuery');
常量存储=新存储();
const bigquery=new bigquery();
constDataSet=bigquery.dataset('toy_test');
const bucket=storage.bucket('ga_report');
exports.readCSVContent=async(事件、上下文)=>{
const gcsEvent=事件;
const fileName=gcsEvent.id;
log(文件名);
console.log(文件名的类型);
如果(
fileName.startsWith('processed/'))||
fileName.startsWith('unprocessed/'))
) {
console.log('1');
返回;
}否则{
返回等待新承诺((解决、拒绝)=>{
让fileContents=新缓冲区(“”);
console.log('2');
试一试{
水桶
.file(文件名)
.createReadStream({
起点:10000,
完二万
})
.on('error',函数(err){
console.log(“发现错误”);
拒绝('存储API返回错误:'+err);
})
.on('data',函数(块){
log('buffer');
fileContents=Buffer.concat([fileContents,chunk]);
})
.on('end',异步函数(){
console.log('end');
让content=fileContents.toString('utf8');
试一试{
等待bucket.file('unprocessed/'+gcsEvent.id).save(content);
}捕获(错误){
console.log(错误);
}
console.log('3');
const parsedCSV=Papa.parse(内容{
转换:函数(元素,i){
if(i==0&&element.length==8){
变量年=元素子串(0,4);
变量月=元素子串(4,6);
var day=元素子串(6,8);
console.log('4');
常数日期=时刻(
year.toString()+month.toString()+day.toString()
).格式('YYYY-MM-DDTHH:MM:SS');
控制台日志('5');
返回日期;
}否则{
返回元素;
}
},
换行符:'\n',
Skipeptylines:没错,
});
让parsedData=parsedCSV.data;
console.log('6');
拼接(0,6);
parsedData.reverse();
拼接(0,6);
parsedData.reverse();
console.log(parsedData);
const jsonData=parsedData.map((值,索引)=>{
返回{
日期:值[0],
汽车型号:数值[1],
配置:值[2],
};
});
试一试{
等待dataset.table('my_table').insert(jsonData);
log(`Inserted${jsonData.length}行`);
}捕获(错误){
console.log(错误);
}
const finalCSV=Papa.unparse(解析数据);
const currentDateTime=moment().格式('YYYY-MM-DD HH:MM:ss');
试一试{
等待桶
.文件(
“已处理/”+
当前日期时间+
“配置”+
“.csv”
)
.save(finalCSV);
console.log(
已处理“+”中的gcsEvent.id++”
);
}捕获(错误){
console.log(错误);
}
const[files]=wait bucket.getFiles();
files.forEach((元素)=>{
console.log(element.name);
});
});
}捕获(错误){
console.log(错误);
}
});
}
};

此问题的关键是错误消息:

Request range not satisfiable
生成错误的代码:

bucket
  .file(fileName)
  .createReadStream({
    start: 10000,
    end: 20000
  })
在本例中,对象大小为700字节,对
createReadStream()
的调用指定的起始偏移量为10000字节,这是不可能的


解决方案是为这样一个小文件指定正确的范围,或者根本不使用范围。

什么是
err
指示?@JohnHanley
err
指示拒绝时的错误消息。错误消息是什么?在记录实际错误时,我收到以下消息:
错误发现错误:请求范围不正确令人满意
。我明白了!谢谢你给我提示。它帮助我解决了这个问题,我学到了很多关于流和缓冲区的知识