下記のようなソースがあります
var async = require('async');
var aws = require('aws-sdk');
var s3 = new aws.S3({});
var https = require('https');
var path = require('path');
var mysql = require('mysql');
var analyzeJson = require('./analyzeJson');
var VISION_API_HOST = 'api.projectoxford.ai'; // Vision APIのホスト名
var VISION_API_PATH = 'https://api.projectoxford.ai/vision/v1.0/ocr?language=unk&detectOrientation=true&subscription-key='; // Vision APIのエンドポイント
var CONTENT_TYPE1 = 'application/octet-stream'; // Type
var CONTENT_TYPE2 = 'application/json; charset=utf-8'; var ANALYZED_FILE_EXTENSION = '.txt'; var XAmzDate = 'X-Amz-Date';
var ExportsHandler = function(destinationBucket, apiKey, dbConfig) {
var self = this;
self.destinationBucket = destinationBucket;
self.apiKey = apiKey;
self.dbConfig = dbConfig;
};
/**
- S3の[get|put]Object用引数を返します。
- bucket: バケット名
- key: キー名
- body: putObject時のデータ
*/
ExportsHandler.prototype.paramsForS3 = function(bucket, key, body) {
var params = {Bucket: bucket, Key: key};
if (body) {
params.Body = body;
}
return params;
};
// err オブジェクトをJSON形式でログへ出力します。
ExportsHandler.prototype.consoleLogErr = function(err) {
console.log("err");
console.log(JSON.stringify(err, null, ' '));
};
ExportsHandler.prototype.getExportsHandler = function() {
var self = this;
return function(event, context) {
var records = [];
event.Records.forEach(function (eventRecord) {
var bucket = eventRecord.s3.bucket.name;
var key = decodeURIComponent(eventRecord.s3.object.key);
var dirname = path.dirname(key);
var extension = path.extname(key);
var basename = path.basename(key, extension);
var record = {
bucket: bucket,
key: key,
dirname: dirname,
basename: basename,
extension: extension,
data: null,
response: null,
done: false,
};
records.push(record);
});
records.forEach(function(record){ async.waterfall([ // S3から画像を取得します。 function(callback) {
console.log('records.forEach, s3.getObject');
var bucket = record.bucket;
var key = record.key;
var params = self.paramsForS3(bucket, key);
s3.getObject(params, function(err, data) {
if (!err) {
record.data = data;
callback(null, record);
} else {
self.consoleLogErr(err);
callback(err);
}
});
},
// 画像データをVision APIへ投げます。
function(record, callback) {
console.log('https.request');
var options = {
host: VISION_API_HOST,
type: CONTENT_TYPE1,
method: 'POST'
};
var request = https.request(options, function(response) {
response.setEncoding('utf8');
record.response = '';
response.on('data', function(chunk) {
record.response += chunk;
});
response.on('end', function() {
callback(null, record);
});
});
request.on('error', function(err) {
self.consoleLogErr(err);
callback(err);
});
var jsonObject = {
requests: [
{
image: {
content: record.data.Body.toString('base64'),
},
features: [
{
type: CONTENT_TYPE2,
maxResults: 1,
},
],
},
],
};
var jsonString = JSON.stringify(jsonObject);
request.write(jsonString);
request.end();
},
};
module.exports = ExportsHandler;
サーバー通信ができないで下記のようなエラーが出ます。
Assertion failed: (object->InternalFieldCount()) > (0), file c:\ws\src\util-inl.h, line 196
あなたの回答
tips
プレビュー