注意1: 本来の要件は上記本文にあるように「Excelファイルのインポート」でした。実際のアプリではモジュールを用いてExcelのシートをCSVファイルに変換したものをObject Storeに格納していますが、その部分は割愛しCSVファイルをアップロードし、それをインポートするということで解説させて頂きます。 注意2: 本ブログはSAP Cloud Platform Cloud foundry on AWSを対象としています。on Azureでも同様の方法が取れると思いますが確認はしていません。 |
const csvSync = require('csv-parse/lib/sync');
let csvdata = fs.readFileSync('/app/public/temp/' + req.file.filename);
let csvarray = csvSync(csvdata); //Convert csv file to array
..........
var sql = 'INSERT INTO "HCIMPORTSAMPLE_HDI_DB_1"."hcimportsample.db::testtable" VALUES(?,?,?,?,?,?,?,?,?,?);';
var stmt = conn.prepare(sql);
for (let i=0;i<csvarray.length;i++){
try {
stmt.exec([csvarray[i][0],csvarray[i][1],csvarray[i][2],csvarray[i][3],csvarray[i][4],csvarray[i][5],csvarray[i][6],csvarray[i][7],csvarray[i][8],csvarray[i][9]]);
} catch (err) {
console.log("Insert error --- ", i.toString());
console.log("SQL=", sql);
console.log("DB Error: SQL Execution --- ", err);
return;
}
}
今回はObject StoreにてAWS S3を使用しています。Maxime Simonが解説した文章でのS3へのアクセスで必要な情報はObject StoreをアプリケーションにバインドするとSensitive Dataとして閲覧できます。
var AWS = require('aws-sdk');
let csvdata = fs.readFileSync('/app/public/temp/' + req.file.filename);
const credentials = new AWS.Credentials({ accessKeyId: vcap_services.objectstore[0].credentials.access_key_id, secretAccessKey: vcap_services.objectstore[0].credentials.secret_access_key });
AWS.config.credentials = credentials;
AWS.config.update({ region: vcap_services.objectstore[0].credentials.region });
var s3 = new AWS.S3();
var params = {
Bucket: vcap_services.objectstore[0].credentials.bucket,
Key: req.file.filename
};
params.Body = csvdata;
var putObjectPromise = s3.putObject(params).promise();
putObjectPromise.then(function (data) {
var sql = "IMPORT FROM CSV FILE 's3-" + vcap_services.objectstore[0].credentials.region + "://" +
vcap_services.objectstore[0].credentials.access_key_id + ":" + vcap_services.objectstore[0].credentials.secret_access_key + "@" +
vcap_services.objectstore[0].credentials.bucket + "/" + req.file.filename + "' INTO " +
'"HCIMPORTSAMPLE_HDI_DB_1"."hcimportsample.db::testtable";';
var stmt = conn.prepare(sql);
try {
stmt.exec();
} catch (err) {
console.log("IMPORT ERROR --- ");
console.log("SQL=", sql);
console.log("DB Error: SQL Execution --- ", err);
}
return;
}).catch(function (err) {
console.log(err);
return;
});
記事中にはコードの一部しか貼り付けできませんでしたので、Webアプリケーションとして実行できる簡単なサンプルを用意しました。
こちらに公開しましたのでご興味のある方は試してみてください。
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
12 | |
10 | |
10 | |
7 | |
7 | |
7 | |
6 | |
6 | |
5 | |
4 |