Amazon SDK

Node.js 雲端服務 - Amazon (1)

基本介紹

教學目標

透過 Node.js 進行 Amazon DynamoDB 傳入和取出 JSON 格式的記錄。

前置作業

  1. 申請 AWS 雲端服務帳號。
  2. 請在 Amazon DynamoDB 服務中建立 Table (建立 id 為主鍵的 Hash 字串),用於傳入和取出 JSON 檔案。
  3. 透過 AWS IAM Management Console 取得 AWS credentials 用於授權存取 AWS 雲端服務,並且新增 config.json。
    1
    { "accessKeyId": "Access Key ID", "secretAccessKey": "Secret Access Key", "region": "us-east-1" }

套件安裝

1
$ npm install aws-sdk --save

使用教學

建立

1
2
3
var AWS = require('aws-sdk');
AWS.config.loadFromPath("./config.json");
var dynamodb = new AWS.DynamoDB();

傳入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var params = {
"TableName": "Table 名稱",
"Item": {
"id":{"S": "1"},
"name":{"S": "leoyeh"}
}
};
dynamodb.putItem(params, function(err, result) {
if (err) {
console.log(err);
} else {
console.log(result);
}
});

取出

1
2
3
4
5
6
7
8
9
10
11
12
13
var params = {
"TableName":"Table 名稱",
"Key":{
"id":{"S": "1"}
}
};
dynamodb.getItem(params, function(err, result) {
if (err) {
console.log(err);
} else {
console.log(result.Item);
}
});

更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var params = {
"TableName": "Table 名稱",
"Key": {
"id": {"S": "1"}
},"AttributeUpdates": {
"gender": {"Value": {"S": "male"}, "Action": "PUT"},
"age": {"Value": {"N": 25}, "Action": "PUT"}
}
};
dynamodb.updateItem(params, function(err, result) {
if (err) {
console.log(err);
} else {
console.log(result);
}
});

掃描

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var params = {
"TableName": "Table 名稱",
"ScanFilter": {
"gender": {
"AttributeValueList": [{"S": "male"}],
"ComparisonOperator": "CONTAIN"
},
},
"Limit": "100"
};
dynamodb.scan(params, function(err, result) {
if (err) {
console.log(err);
} else {
console.log(result);
}
});

相關資源

Node.js 雲端服務 - Amazon (4)

基本介紹

教學目標

透過 Node.js 進行 Amazon Kinesis 傳入和取出 JSON 格式的記錄。

前置作業

  1. 申請 AWS 雲端服務帳號。
  2. 請在 Amazon Kinesis 服務中建立 Stream 用於傳入和取出 JSON 檔案。
  3. 透過 AWS IAM Management Console 取得 AWS credentials 用於授權存取 AWS 雲端服務,並且新增 config.json。
    1
    { "accessKeyId": "Access Key ID", "secretAccessKey": "Secret Access Key", "region": "us-east-1" }

套件安裝

1
$ npm install aws-sdk --save

使用教學

建立

1
2
3
var AWS = require('aws-sdk'); 
AWS.config.loadFromPath('./config.json');
var kinesis = new AWS.Kinesis();

傳入

1
2
3
4
5
6
7
8
9
10
11
12
var params = {
Data: JSON.stringify({id:1,name:"leoyeh"}),
PartitionKey: "key",
StreamName: "Stream 名稱"
};
kinesis.putRecord(params, function(err, result) {
if (err) {
console.log(err);
} else {
console.log(result);
}
});

取出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var params = {
ShardId: "shardId-000000000000",
ShardIteratorType: "LATEST",
StreamName: "Stream 名稱",
};
kinesis.getShardIterator(params, function(err, result) {
if (err) {
console.log(err);
} else {
getRecord(result.ShardIterator);
}
});

function getRecord(shard_iterator) {
var params = {
ShardIterator: shard_iterator
};
kinesis.getRecords(params, function(err, result) {
if (err) {
console.log(err);
} else {
try {
var StringDecoder = require('string_decoder').StringDecoder;
var decoder = new StringDecoder('utf8');
var data = JSON.parse(decoder.write(result.Records[0].Data));
console.log(data);
} catch(err) {
console.log("等待資料...");
}
if (result.NextShardIterator) {
getRecord(result.NextShardIterator);
}
}
});
}

相關資源

Node.js 雲端服務 - Amazon (6)

基本介紹

教學目標

透過 Node.js 搭配 Amazon S3 雲端服務建立上傳圖片檔案的應用。

前置作業

  1. 申請 AWS 雲端服務帳號。
  2. 請在 Amazon S3 服務中建立 Bucket 用於儲存圖片檔案。
  3. 透過 AWS IAM Management Console 取得 AWS credentials 用於授權存取 AWS 雲端服務,並且新增 config.json。
    1
    { "accessKeyId": "Access Key ID", "secretAccessKey": "Secret Access Key", "region": "us-east-1" }

套件安裝

1
$ npm install aws-sdk --save

使用教學

撰寫程式

首先透過 HTML5 、 Bootstrap 套件和 jQuery 套件開發上傳網頁。

file_upload.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!DOCTYPE HTML>
<html>
<head>
<title>檔案上傳服務</title>
<link href="http://library.leoyeh.me/css/bootstrap/bootstrap-3.3.1.min.css" rel="stylesheet"></link>
<link href="http://library.leoyeh.me/css/bootstrap/bootstrap-theme-3.3.1.min.css" rel="stylesheet"></link>
<link href="http://library.leoyeh.me/css/bootstrap/cover/cover.css" rel="stylesheet"></link>
<link href="http://library.leoyeh.me/css/jquery/jquery.fileupload-9.5.7.min.css" rel="stylesheet"></link>
<script src="http://library.leoyeh.me/js/jquery/jquery-1.11.1.min.js"></script>
<script src="http://library.leoyeh.me/js/jquery/jquery-ui-1.10.4.min.js"></script>
<script src="http://library.leoyeh.me/js/jquery/jquery.fileupload-9.5.7.min.js"></script>
</head>
<body>
<div class="site-wrapper">
<div class="site-wrapper-inner">
<div class="cover-container">
<div class="masthead clearfix">
<div class="inner">
<h1 class="masthead-brand">檔案上傳服務</h1>
</div>
</div>
<div class="inner cover">
<h3 class="cover-heading">上傳</h3>
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Select files...</span>
<input id="fileupload" type="file" name="images" multiple>
</span>
<h3 class="cover-heading">處理</h3>
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<h3 class="cover-heading">網址</h3>
<div id="result">
</div>
</div>
<div class="mastfoot">
<div class="inner">
<p>&copy; 2014 <a href="https://github.com/LeoYehTW/file-upload-with-s3" target="_blank">Github</a> (MIT license) .</p>
</div>
</div>
</div>
</div>
</div>
<script>
$(function() {
$('#fileupload').fileupload({
url: '/images',
dataType: 'json',
progressall: function(e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress .progress-bar').css('width', progress + '%');
},
done: function(e, data) {
$("#result").html(data.result.url);
}
});
});
</script>

</body>
</html>

接著透過 Node.js 和 Express 套件開發上傳伺服器。

server.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
'use strict';
var express = require('express');
var multer = require('multer');
var mime = require('mime');
var path = require('path');
var fs = require('fs');

var app = express();
app.listen(5000);

app.use(express.static(path.join(__dirname, 'public')));

app.use(multer({ dest: './uploads/' }));

var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
var s3bucket = new AWS.S3();

app.post('/images', function (req, res) {
console.log(req.files.images);
fs.readFile(req.files.images.path, function (err, data) {
var filename = req.files.images.originalname;
s3bucket.putObject({
Bucket: "bucket 名稱",
Key: 'images/' + filename,
Body: data,
ACL:'public-read',
ContentType: mime.lookup(filename)
}, function (err, data) {
if (err) {
console.log(err);
} else {
var file_data = new Object();
file_data.url = "https://s3.amazonaws.com/[bucket 名稱]/images/" + filename;
res.send(file_data);
}
});
});
});

此外可以從 Github 下載完整程式碼範例。

1
$ git clone https://github.com/LeoYehTW/file-upload-with-s3

注意事項

請勿搭配 forever -w 指令一起使用,因為當上傳檔案過大時,會發生上傳一半被中斷的問題。

相關資源

Node.js 雲端服務 - Amazon (3)

基本介紹

教學目標

透過 Node.js 進行 Amazon SQS 上傳與下載 JSON 格式的檔案。

前置作業

  1. 申請 AWS 雲端服務帳號。
  2. 請在 Amazon SQS 服務中建立新的 Queue 用於儲存 JSON 格式的檔案。
  3. 透過 AWS IAM Management Console 取得 AWS credentials 用於授權存取 AWS 雲端服務,並且新增 config.json。
    1
    { "accessKeyId": "Access Key ID", "secretAccessKey": "Secret Access Key", "region": "us-east-1" }

套件安裝

1
$ npm install aws-sdk --save

使用教學

建立

1
2
3
var AWS = require('aws-sdk'); 
AWS.config.loadFromPath('./config.json');
var sqs = new AWS.SQS(});

上傳

1
2
3
4
5
6
7
8
9
10
11
var params = {
QueueUrl: "Queue 網址",
MessageBody: "資料內容"
};
sqs.sendMessage(params, function (err, data) {
if (err) {
console.log(err);
} else {
console.log('Message sent.');
}
});

下載

1
2
3
4
5
6
7
8
9
10
11
12
13
var params = {
QueueUrl: "Queue 網址",
"MaxNumberOfMessages": 1
};
queue.receiveMessage(params, function (err, data) {
if (err) {
console.log(err);
} else {
if (data) {
console.log(data.Messages); // message data in Messages structure
}
}
});

相關資源

Node.js 雲端服務 - Amazon (2)

基本介紹

教學目標

透過 Node.js 進行 Amazon S3 上傳與下載 JSON 格式的檔案。

前置作業

  1. 申請 AWS 雲端服務帳號。
  2. 請在 Amazon S3 服務中建立 Bucket 用於儲存 JSON 格式的檔案。
  3. 透過 AWS IAM Management Console 取得 AWS credentials 用於授權存取 AWS 雲端服務,並且新增 config.json。
    1
    { "accessKeyId": "Access Key ID", "secretAccessKey": "Secret Access Key", "region": "us-east-1" }

套件安裝

1
$ npm install aws-sdk --save

使用教學

建立

1
2
3
var AWS = require('aws-sdk'); 
AWS.config.loadFromPath('./config.json');
var s3 = new AWS.S3();

上傳

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var params = {
Bucket: "bucket 名稱",
Key: "path/file 名稱",
Body: {data: "資料內容"},
ACL: "public-read",
ContentType: "application/json"
};
s3.putObject(params, function(err, data) {
if (err) {
console.log(err);
} else {
console.log("上傳 JSON 檔案成功!");
}
});

下載

1
2
3
4
5
6
7
8
9
10
11
var params = {
Bucket: "bucket 名稱",
Key: "path/file 名稱"
};
s3.getObject(params, function(err, data) {
if (err) {
console.log(err);
} else {
console.log(JSON.parse(data.Body.toString()));
}
});

相關資源