use new s3 url style
This commit is contained in:
parent
9a332a12d9
commit
aee8c5f182
|
@ -0,0 +1,51 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
require('dotenv').config();
|
||||||
|
var env = process.env;
|
||||||
|
var s3 = require('../index.js');
|
||||||
|
|
||||||
|
var accessKeyId = env.AWS_ACCESS_KEY;
|
||||||
|
var secretAccessKey = env.AWS_SECRET_ACCESS_KEY;
|
||||||
|
var region = env.AWS_REGION;
|
||||||
|
var bucket = env.AWS_BUCKET;
|
||||||
|
var prefix = env.AWS_BUCKET_PREFIX;
|
||||||
|
|
||||||
|
var key = process.argv[2];
|
||||||
|
var filepath = process.argv[3];
|
||||||
|
var fs = require('fs');
|
||||||
|
|
||||||
|
if (!key || !filepath) {
|
||||||
|
console.info('Usage: s3-download.js s3-key-name ./path/to/file.bin');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function run() {
|
||||||
|
// GET STREAMED FILE
|
||||||
|
await s3
|
||||||
|
.get({
|
||||||
|
accessKeyId,
|
||||||
|
secretAccessKey,
|
||||||
|
region,
|
||||||
|
bucket,
|
||||||
|
prefix,
|
||||||
|
key
|
||||||
|
})
|
||||||
|
.then(function(resp) {
|
||||||
|
console.log(resp.url);
|
||||||
|
return fs.promises.writeFile(filepath, resp.body);
|
||||||
|
})
|
||||||
|
.catch(function(err) {
|
||||||
|
console.error('Error:');
|
||||||
|
console.error('GET Response:');
|
||||||
|
if (err.response) {
|
||||||
|
console.error(err.response.statusCode);
|
||||||
|
console.error(err.response.headers);
|
||||||
|
console.error(err.url);
|
||||||
|
} else {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
run();
|
60
index.js
60
index.js
|
@ -7,6 +7,7 @@ var env = process.env;
|
||||||
module.exports = {
|
module.exports = {
|
||||||
// HEAD
|
// HEAD
|
||||||
head: function({
|
head: function({
|
||||||
|
host,
|
||||||
accessKeyId,
|
accessKeyId,
|
||||||
secretAccessKey,
|
secretAccessKey,
|
||||||
region,
|
region,
|
||||||
|
@ -44,19 +45,20 @@ module.exports = {
|
||||||
}
|
}
|
||||||
var signed = aws4.sign(
|
var signed = aws4.sign(
|
||||||
{
|
{
|
||||||
// host: awsHost
|
host: host || bucket + '.s3.amazonaws.com',
|
||||||
service: 's3',
|
service: 's3',
|
||||||
region: region,
|
region: region,
|
||||||
path: '/' + bucket + '/' + prefix + key,
|
path: (host ? '/' + bucket : '') + '/' + prefix + key,
|
||||||
method: 'HEAD',
|
method: 'HEAD',
|
||||||
signQuery: true
|
signQuery: true
|
||||||
},
|
},
|
||||||
{ accessKeyId: accessKeyId, secretAccessKey: secretAccessKey }
|
{ accessKeyId: accessKeyId, secretAccessKey: secretAccessKey }
|
||||||
);
|
);
|
||||||
var url = 'https://' + signed.hostname + signed.path;
|
var url = 'https://' + signed.host + signed.path;
|
||||||
|
|
||||||
return request({ method: 'HEAD', url }).then(function(resp) {
|
return request({ method: 'HEAD', url }).then(function(resp) {
|
||||||
if (200 === resp.statusCode) {
|
if (200 === resp.statusCode) {
|
||||||
|
resp.url = url;
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
var err = new Error(
|
var err = new Error(
|
||||||
|
@ -72,6 +74,7 @@ module.exports = {
|
||||||
|
|
||||||
// GET
|
// GET
|
||||||
get: function({
|
get: function({
|
||||||
|
host,
|
||||||
accessKeyId,
|
accessKeyId,
|
||||||
secretAccessKey,
|
secretAccessKey,
|
||||||
region,
|
region,
|
||||||
|
@ -86,40 +89,46 @@ module.exports = {
|
||||||
}
|
}
|
||||||
var signed = aws4.sign(
|
var signed = aws4.sign(
|
||||||
{
|
{
|
||||||
|
host: host || bucket + '.s3.amazonaws.com',
|
||||||
service: 's3',
|
service: 's3',
|
||||||
region: region,
|
region: region,
|
||||||
path: '/' + bucket + '/' + prefix + key,
|
path: (host ? '/' + bucket : '') + '/' + prefix + key,
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
signQuery: true
|
signQuery: true
|
||||||
},
|
},
|
||||||
{ accessKeyId: accessKeyId, secretAccessKey: secretAccessKey }
|
{ accessKeyId: accessKeyId, secretAccessKey: secretAccessKey }
|
||||||
);
|
);
|
||||||
var url = 'https://' + signed.hostname + signed.path;
|
var url = 'https://' + signed.host + signed.path;
|
||||||
|
|
||||||
// stay binary by default
|
// stay binary by default
|
||||||
var encoding = null;
|
var encoding = null;
|
||||||
if (json) {
|
if (json) {
|
||||||
encoding = undefined;
|
encoding = undefined;
|
||||||
}
|
}
|
||||||
return request({ method: 'GET', url, encoding: null, json: json }).then(
|
return request({
|
||||||
function(resp) {
|
method: 'GET',
|
||||||
if (200 === resp.statusCode) {
|
url,
|
||||||
return resp;
|
encoding: encoding,
|
||||||
}
|
json: json
|
||||||
var err = new Error(
|
}).then(function(resp) {
|
||||||
'expected status 200 but got ' +
|
if (200 === resp.statusCode) {
|
||||||
resp.statusCode +
|
resp.url = url;
|
||||||
'. See err.response for more info.'
|
return resp;
|
||||||
);
|
|
||||||
err.url = url;
|
|
||||||
err.response = resp;
|
|
||||||
throw err;
|
|
||||||
}
|
}
|
||||||
);
|
var err = new Error(
|
||||||
|
'expected status 200 but got ' +
|
||||||
|
resp.statusCode +
|
||||||
|
'. See err.response for more info.'
|
||||||
|
);
|
||||||
|
err.url = url;
|
||||||
|
err.response = resp;
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
// PUT
|
// PUT
|
||||||
set: function({
|
set: function({
|
||||||
|
host,
|
||||||
accessKeyId,
|
accessKeyId,
|
||||||
secretAccessKey,
|
secretAccessKey,
|
||||||
region,
|
region,
|
||||||
|
@ -135,15 +144,16 @@ module.exports = {
|
||||||
}
|
}
|
||||||
var signed = aws4.sign(
|
var signed = aws4.sign(
|
||||||
{
|
{
|
||||||
|
host: host || bucket + '.s3.amazonaws.com',
|
||||||
service: 's3',
|
service: 's3',
|
||||||
region: region,
|
region: region,
|
||||||
path: '/' + bucket + '/' + prefix + key,
|
path: (host ? '/' + bucket : '') + '/' + prefix + key,
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
signQuery: true
|
signQuery: true
|
||||||
},
|
},
|
||||||
{ accessKeyId: accessKeyId, secretAccessKey: secretAccessKey }
|
{ accessKeyId: accessKeyId, secretAccessKey: secretAccessKey }
|
||||||
);
|
);
|
||||||
var url = 'https://' + signed.hostname + signed.path;
|
var url = 'https://' + signed.host + signed.path;
|
||||||
var headers = {};
|
var headers = {};
|
||||||
if ('undefined' !== typeof size) {
|
if ('undefined' !== typeof size) {
|
||||||
headers['Content-Length'] = size;
|
headers['Content-Length'] = size;
|
||||||
|
@ -153,6 +163,7 @@ module.exports = {
|
||||||
resp
|
resp
|
||||||
) {
|
) {
|
||||||
if (200 === resp.statusCode) {
|
if (200 === resp.statusCode) {
|
||||||
|
resp.url = url;
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
var err = new Error(
|
var err = new Error(
|
||||||
|
@ -168,6 +179,7 @@ module.exports = {
|
||||||
|
|
||||||
// DELETE
|
// DELETE
|
||||||
del: function({
|
del: function({
|
||||||
|
host,
|
||||||
accessKeyId,
|
accessKeyId,
|
||||||
secretAccessKey,
|
secretAccessKey,
|
||||||
region,
|
region,
|
||||||
|
@ -181,18 +193,20 @@ module.exports = {
|
||||||
}
|
}
|
||||||
var signed = aws4.sign(
|
var signed = aws4.sign(
|
||||||
{
|
{
|
||||||
|
host: host || bucket + '.s3.amazonaws.com',
|
||||||
service: 's3',
|
service: 's3',
|
||||||
region: region,
|
region: region,
|
||||||
path: '/' + bucket + '/' + prefix + key,
|
path: (host ? '/' + bucket : '') + '/' + prefix + key,
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
signQuery: true
|
signQuery: true
|
||||||
},
|
},
|
||||||
{ accessKeyId: accessKeyId, secretAccessKey: secretAccessKey }
|
{ accessKeyId: accessKeyId, secretAccessKey: secretAccessKey }
|
||||||
);
|
);
|
||||||
var url = 'https://' + signed.hostname + signed.path;
|
var url = 'https://' + signed.host + signed.path;
|
||||||
|
|
||||||
return request({ method: 'DELETE', url }).then(function(resp) {
|
return request({ method: 'DELETE', url }).then(function(resp) {
|
||||||
if (204 === resp.statusCode) {
|
if (204 === resp.statusCode) {
|
||||||
|
resp.url = url;
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
var err = new Error(
|
var err = new Error(
|
||||||
|
|
Loading…
Reference in New Issue