Created
March 1, 2018 16:11
-
-
Save ranafarhanakram/ee238c964329059351bfa0d80660cb3d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function newReadAndUpload(){ | |
// Compute hash | |
var filename = path.join(__dirname, '/input.csv.gz'); | |
return hash(filename).then(hash=>{ | |
console.log("hash: " + hash); | |
// Generated signed url | |
return getSignedUrl(hash).then(signedURL=>{ | |
console.log("Signed URL: " + signedURL); | |
// Open file | |
var stat = fs2.stat(filename); | |
var stream = fs2.createReadStream(filename); | |
console.log(stat); | |
// Upload | |
var urlOpts = url.parse(signedURL); | |
var req = https.request({ | |
method: 'PUT', | |
host: urlOpts.host, | |
path: urlOpts.path, | |
headers: { | |
'content-type': 'application/x-tar', | |
//'content-length': stat.size, | |
'content-encoding': 'gzip', | |
'cache-control': 'public, no-transform', | |
'content-md5': hash | |
} | |
}); | |
// Pipe stream | |
stream.pipe(req); | |
return res().then(res =>{ | |
// Print status code | |
console.log("Response Code: " + res.statusCode); | |
// Discard response text | |
res.resume(); | |
}).catch(err =>{ | |
return {status: false, code: 500, data: err}; | |
}); | |
}).catch(err =>{ | |
return {status: false, code: 500, data: err}; | |
}); | |
}).catch(err =>{ | |
return {status: false, code: 500, data: err}; | |
}) | |
} | |
function hash(filename){ | |
var hash = new Promise((accept, reject) => { | |
var md5 = crypto.createHash('md5'); | |
var stream = fs2.createReadStream(filename); | |
stream.on('data', d => md5.update(d)); | |
stream.on('end', () => accept(md5.digest('base64'))); | |
stream.on('error', reject); | |
}); | |
return hash; | |
} | |
function res(){ | |
var res = new Promise((accept, reject) => { | |
req.on('response', accept); | |
req.on('error', reject); | |
req.setTimeout(5 * 60 * 1000, reject); | |
}); | |
return res; | |
} | |
function getSignedUrl(hash){ | |
var signedURL = new Promise((accept, reject) => { | |
var s3 = new aws.S3(); | |
s3.getSignedUrl('putObject', { | |
Bucket: 'itgdata', | |
Key: 'datadump/" + title + ".gz', | |
ContentType: 'application/x-tar', | |
Expires: 15 * 60, // URL expiration | |
ContentMD5: hash, | |
Metadata: { | |
"content-sha256": "Hello World2" | |
} | |
}, (err, url) => err ? reject(err) : accept(url)); | |
}); | |
return signedURL ; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment