使用node.js和Glob将多个文件从Google云VM上载到Google云存储
我正在尝试Node.js将多个文件从我的Google Compute Engine VM本地目录上载到我已经创建的GCS存储桶。每次运行脚本时都会出现以下错误使用node.js和Glob将多个文件从Google云VM上载到Google云存储,node.js,api,npm,google-cloud-storage,glob,Node.js,Api,Npm,Google Cloud Storage,Glob,我正在尝试Node.js将多个文件从我的Google Compute Engine VM本地目录上载到我已经创建的GCS存储桶。每次运行脚本时都会出现以下错误 TypeError[ERR\u INVALID\u ARG\u TYPE]:“path”参数必须是string类型。接收类型功能 剧本: `//导入Google云客户端库 const{Storage}=require('@googlecloud/Storage'); 常数fs=要求('fs'); 常量glob=require('glob
TypeError[ERR\u INVALID\u ARG\u TYPE]:“path”参数必须是string类型。接收类型功能
剧本:
`//导入Google云客户端库
const{Storage}=require('@googlecloud/Storage');
常数fs=要求('fs');
常量glob=require('glob');
//要访问的存储桶的名称,例如“我的存储桶”
const bucketName=“myBucket”;
//实例化客户机
常量存储=新存储({
projectId:'myprojectID',
keyFilename:“我的GCS服务密钥”
});
//获取虚拟机本地目录中的文件
var allfiles=glob('folder/*.js',函数(err,files){
如果(错误){
控制台日志(err);
}
});
//将VM本地目录文件上载到bucket
存储
.bucket(bucketName)
.上传(所有文件)
.然后(()=>{
log(`${allfiles}上传到${bucketName}.`);
})
.catch(错误=>{
console.error('error:',err);
});'
您的错误是使用所有文件
作为全局
的返回值。这是不正确的,文件名在回调中可用(因为glob是异步的),而不是在返回值中
glob('folder/*.js', function (err, files) {
if (err) {
console.log(err);
}
var allfiles = files;
// Uploads VM local dir files to the bucket
storage
.bucket(bucketName)
.upload(allfiles)
.then(() => {
console.log(`${allfiles} uploaded to ${bucketName}.`);
})
.catch(err => {
console.error('ERROR:', err);
});'
});
所以,我终于让剧本发挥作用了。问题是,文件路径被捕获为对象,但Google云存储服务需要路径作为字符串 然后必须使用JSON.stringify将路径更改为字符串,然后拆分resuting数组以仅选择文件路径内容
//导入Google云客户端库
const{Storage}=require('@googlecloud/Storage');
常数fs=要求('fs');
var bucketName='预期GCS bucketName';
常量存储=新存储({
projectId:'完整项目Id',keyFilename:'云服务密钥'
});
//调用Glob以读取本地/虚拟机中的文件路径
var glob=需要(“glob”);
glob('本地/vm目录的路径',函数(错误,文件){
如果(错误){
控制台日志(err);
}
var list=JSON.stringify(文件);
list=list.split(“”);
var listone=list[1];
存储
.bucket(bucketName)
.上传(列表一)
.然后(()=>{
log(`${listone}上传到${bucketName}.`);
})
.catch(错误=>{
console.error('error:',err);
});
})
Hi@mihai,非常感谢您的回答。我相信它设置了正确的代码上下文,但在实施您的建议后,我仍然会遇到相同的错误。console.log(allfiles)
print是什么?它将优先于文件路径。您确定您会遇到相同的错误而不是其他错误吗?