Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.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 如何读取EC2实例文件夹中的CSV文件,而不是AWS中的S3存储桶?_Javascript_Amazon S3_Amazon Ec2_Fast Csv - Fatal编程技术网

Javascript 如何读取EC2实例文件夹中的CSV文件,而不是AWS中的S3存储桶?

Javascript 如何读取EC2实例文件夹中的CSV文件,而不是AWS中的S3存储桶?,javascript,amazon-s3,amazon-ec2,fast-csv,Javascript,Amazon S3,Amazon Ec2,Fast Csv,我用FastCSV编写了一个脚本,可以在AmazonS3中读取excel文件,然后将数据存储在mySQL中。我现在有一个ec2实例集,创建了一个名为“upload”的文件夹,并将CSV文件放在其中。我的问题是如何读取ec2实例中与s3 bucket相反的文件?下面是当前使用的脚本 const s3Stream = s3.getObject(params).createReadStream() stream = require('fast-csv').parseStream(s3Str

我用FastCSV编写了一个脚本,可以在AmazonS3中读取excel文件,然后将数据存储在mySQL中。我现在有一个ec2实例集,创建了一个名为“upload”的文件夹,并将CSV文件放在其中。我的问题是如何读取ec2实例中与s3 bucket相反的文件?下面是当前使用的脚本

  const s3Stream = s3.getObject(params).createReadStream()
    stream = require('fast-csv').parseStream(s3Stream, {
        headers: true, skip_blanks: true
    })
        .on("data", data => {
            dataArr.push(data);

        })
    stream = require('fast-csv').parseStream(s3Stream)
        .on("data", data => {
            dataArr2.push(data);
        })

        .on("end", () => {

            let csvStream = csv
                .parse({ ignoreEmpty: true })
                .on('data', function (dataArr2) {
                    myData.push(dataArr2);

                })
                .on('end', function () {
                    dataArr2.shift();

                    console.log('dataArr2 ' + myData)


                    if (dataArr.length > 0) {

                        let columnsIn = dataArr[0];

                        for (let key in columnsIn) {
                            headerDatas.push(key)

                        }
                        for (let key in columnsIn) {
                            orginalHeaderDatas.push(key)
                        }

                        for (i = 0; i < headerDatas.length; i++) {
                            newData = headerDatas[i].split(' ').join('_');
                            correctHeaderFormat.push(newData)
                        }


                        // Assigns approriate Sql property to headers
                        let databaseId = headerDatas[0].split(' ').join('_');
                        let leaseDiscription = headerDatas[1].split(' ').join('_');
                        //Removes Headers that are not DEC propertys 
                        headerDatas.shift();
                        headerDatas.shift();

                        let newdatabaseId = databaseId + ' int(25) NOT NULL'

                        let newleaseDiscription = leaseDiscription + ' varchar(255) NULL'

                        //adds property to the end of the remaining headers in array
                        for (i = 0; i < headerDatas.length; i++) {
                            newData = headerDatas[i].split(' ').join('_') + ' dec(25,2) NULL';
                            updatedData.push(newData)
                        }

                        //Adds headers that were removed from array and primary key to updated array
                        let key = 'PRIMARY KEY (Database_ID)'
                        headersWithProperties.push(updatedData)
                        headersWithProperties.unshift(newleaseDiscription)
                        headersWithProperties.unshift(newdatabaseId)
                        headersWithProperties.push(key)
                    } else {
                        console.log('No columns');
                    }

                    // open the connection
                    connection.connect((error) => {


                        if (error) {
                            console.error(error);
                        } else {

                            let createTable = 'CREATE TABLE `CD 1`' + '(' + headersWithProperties + ')'
                            let insertData = 'INSERT INTO `CD 1` ' + '(' + correctHeaderFormat + ') ' + 'VALUES ?'



                            //create table
                            connection.query(createTable, (error, response) => {
                                console.log("bottom" + connection.query)
                                console.log(error || response);
                            });

                            //insert data
                            connection.query(insertData, [dataArr2], (error, response) => {
                                console.log("bottom" + connection.query)
                                console.log(error || response);
                            });

                        }

                    });
                });

            stream.pipe(csvStream);
        });
const s3Stream=s3.getObject(params.createReadStream())
stream=require('fast-csv')。parseStream(s3Stream{
标题:true,跳过空格:true
})
.on(“数据”,数据=>{
数据传送推送(数据);
})
stream=require('fast-csv')。parseStream(s3Stream)
.on(“数据”,数据=>{
数据arr2.push(数据);
})
.on(“结束”,()=>{
让csvStream=csv
.parse({ignoreEmpty:true})
.on('data',函数(dataArr2){
myData.push(dataArr2);
})
.on('end',函数(){
dataArr2.shift();
console.log('dataArr2'+myData)
如果(dataArr.length>0){
设columnsIn=dataArr[0];
for(输入列sin){
头部数据推送(按键)
}
for(输入列sin){
原始头数据推送(按键)
}
对于(i=0;i{
如果(错误){
控制台错误(error);
}否则{
让createTable='CREATE TABLE`CD 1`'+'('+headersWithProperties++')
让insertData='插入到'CD 1`'+'('+CorrectHeadPerformat+')中'+'值?'
//创建表
connection.query(createTable,(错误,响应)=>{
console.log(“底部”+connection.query)
console.log(错误| |响应);
});
//插入数据
connection.query(insertData[dataArr2],(错误,响应)=>{
console.log(“底部”+connection.query)
console.log(错误| |响应);
});
}
});
});
流管(csvStream);
});

如果我正确理解了您的问题,那么您正在尝试读取本地的csv文件(与node.js和mysql位于同一位置),而不是从S3存储桶读取。 不要使用s3变量获取csv文件,而应该在本地读取它

fs.createReadStream('/path/to/upload/data.csv')


然后,您可以使用与前面类似的方法将其解析到mysql数据库中。如果我的理解是正确的,ec2会创建我的桌面空间的虚拟副本,所以我真的需要本地读取路径吗?抱歉,我知道我听起来像个白痴,只是刚刚开始。它说没有这样的文件或目录,打开“C:\path\to\”它一直引用C驱动器而不是创建文件夹的实例,所以ec2中的路径是/home/ec2 user/uploadI我想你可能会混淆Linux和Windows。Linux就像你说的那样/home/ec2 user/upload