s3-react
Version:
A React library for AWS S3 image upload
95 lines • 4.37 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import Signature from './signature';
import Policy from './policy';
import { xAmzDate, dateYMD } from './utill';
class S3React {
static upload(file, config) {
const fd = new FormData();
const key = `${config.albumName ? config.albumName + '/' : ''}${config.fileName ? config.fileName : file.name}`;
const url = `https://${config.bucketName}.s3.amazonaws.com/`;
fd.append('key', key);
fd.append('acl', 'public-read');
fd.append('Content-Type', file.type);
fd.append('x-amz-meta-uuid', '14365123651274');
fd.append('x-amz-server-side-encryption', 'AES256');
fd.append('X-Amz-Credential', `${config.accessKeyId}/${dateYMD}/${config.region}/s3/aws4_request`);
fd.append('X-Amz-Algorithm', 'AWS4-HMAC-SHA256');
fd.append('X-Amz-Date', xAmzDate);
fd.append('x-amz-meta-tag', '');
fd.append('Policy', Policy.getPolicy(config));
fd.append('X-Amz-Signature', Signature.getSignature(config, dateYMD, Policy.getPolicy(config)));
fd.append("file", file);
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
const errorHandler = (fn) => __awaiter(this, void 0, void 0, function* () {
try {
const data = yield fn;
return [null, data];
}
catch (err) {
return [err];
}
});
const uploadResult = () => __awaiter(this, void 0, void 0, function* () {
let err, result;
[err, result] = yield errorHandler(fetch(url, {
method: 'post',
body: fd
}));
if (err)
reject(err);
resolve({
bucket: config.bucketName,
key: `${config.albumName ? config.albumName + '/' : ''}${file.name}`,
location: `${url}${config.albumName ? config.albumName + '/' : ''}${file.name}`,
result: result
});
});
uploadResult();
}));
}
static delete(config) {
const fd = new FormData();
const url = `https://${config.bucketName}.s3.amazonaws.com/${config.albumName ? config.albumName + '/' : ''}${config.fileName}`;
fd.append('Date', xAmzDate);
fd.append('X-Amz-Date', xAmzDate);
fd.append('Authorization', Signature.getSignature(config, dateYMD, Policy.getPolicy(config)));
fd.append('Content-Type', 'text/plain');
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
const errorHandler = (fn) => __awaiter(this, void 0, void 0, function* () {
try {
const data = yield fn;
return [null, data];
}
catch (err) {
return [err];
}
});
const deleteResult = () => __awaiter(this, void 0, void 0, function* () {
let err, result;
[err, result] = yield errorHandler(fetch(url, {
method: 'delete',
body: fd
}));
if (err)
reject(err);
resolve({
ok: result.ok,
status: result.status,
message: 'File Deleted',
fileName: config.fileName
});
});
deleteResult();
}));
}
}
export default S3React;
//# sourceMappingURL=index.js.map