app.js 3.1 KB
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'); // AWS 의 서비스를 이용하기 위해 사용
const { Rekognition } = require('aws-sdk');

// 이미지를 저장할 버킷 이름
var bucketName = "kindofyourdogimage";
// s3 버킷의 엔드 포인트
var bucketRegion = 'ap-northeast-2';
// access key
var accessId= 'yourId';
// access secret key
var secretKey = 'yoursecretId';
// 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;
            }
          });
        });
        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;