app.js
3.22 KB
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
var createError = require('http-errors');
var express = require('express');
var formidable = require('formidable');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var fs = require('fs')
var AWS = require('aws-sdk');
const { Rekognition } = require('aws-sdk');
// AWS 의 서비스를 이용하기 위해 사용
// 이미지를 저장할 버킷 이름
var bucketName = "kindofyourdogimage";
// s3 버킷의 엔드 포인트
var bucketRegion = 'ap-northeast-2';
// access key
var accessId= 'ACCESSID';
// access secret key
var secretKey = 'SECRETKEY';
// AWS Cognito 인증
AWS.config.update({
region:bucketRegion,
accessKeyId:accessId,
secretAccessKey:secretKey
});
// image업로드 시 해당 route기능 사용
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(__dirname));
// image 올리는 화면
app.get('/', function(req, res){
res.render('index');
});
// image를 받았을 때
app.post('/upload_receiver', function(req,res){
//rekognition 객체
var dogKind = "";
//req 받아옴
var form = new formidable.IncomingForm();
//form을 종류별로 파싱함
form.parse(req, function(err, fields, files){
//s3객체를 만듦
var s3 = new AWS.S3();
//s3에 저장할 형식을 만듦
var params = {
Bucket:bucketName,
ACL:'public-read',
Key:files.userfile.name,
Body: require('fs').createReadStream(files.userfile.path)
}
console.log(files.userfile.name);
//s3에 저장함
s3.upload(params, function(err, data){
var result='';
if(err)
result = 'Fail';
else{
params = {
"Image": {
"S3Object": {
"Bucket": bucketName,
"Name": files.userfile.name
}
},
"MaxLabels": 10,
"MinConfidence": 75
};
// rekogition으로 데이터 분석
var client = new Rekognition();
client.detectLabels(params, function(err, response) {
console.log(params);
response.Labels.some(label => {
// 강아지 종류 추출 작업
if(label.Parents.length > 4 && label.Name != 'Puppy') {
dogKind = label.Name;
res.render('kind',{dogKind:dogKind});
return true;
}
});
if(dogKind == "")
res.render('kind', {dogKind:"무슨 종류인지 잘 모르겠네요"});
});
//result = `<img src="${data.Location}>`;
//console.log(result);
}
});
});
//console.log(err, fields,files)
});
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;