UNPKG

relata-react-aws-s3

Version:

Open Source Module to Upload your Media and files into AWS S3 Bucket directly from Front-end React.

3 lines (2 loc) 3.56 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("short-uuid"),require("crypto-js")):"function"==typeof define&&define.amd?define(["short-uuid","crypto-js"],t):e.relataReactAwsS3=t(e.shortId,e.Crypto)}(this,function(e,t){e=e&&e.hasOwnProperty("default")?e.default:e,t=t&&t.hasOwnProperty("default")?t.default:t;var r=new Date(+new Date+864e5).toISOString(),n=r.split("-").join("").split(":").join("").split(".").join(""),i=r.split("T")[0].split("-").join(""),o=function(){};o.getPolicy=function(e){return new Buffer(JSON.stringify({expiration:r,conditions:[{acl:"public-read"},{bucket:e.bucketName},["starts-with","$key",e.dirName?e.dirName+"/":""],["starts-with","$Content-Type",""],["starts-with","$x-amz-meta-tag",""],{"x-amz-algorithm":"AWS4-HMAC-SHA256"},{"x-amz-credential":e.accessKeyId+"/"+i+"/"+e.region+"/s3/aws4_request"},{"x-amz-date":n},{"x-amz-meta-uuid":"14365123651274"},{"x-amz-server-side-encryption":"AES256"}]})).toString("base64").replace(/\n|\r/,"")};var a=function(){};a.getSignature=function(e,r,n){var i,o,a,s,c,u;return t.HmacSHA256(n,(i=e.secretAccessKey,o=r,a=e.region,s=t.HmacSHA256(o,"AWS4"+i),c=t.HmacSHA256(a,s),u=t.HmacSHA256("s3",c),t.HmacSHA256("aws4_request",u))).toString(t.enc.Hex)};var s=function(e){this.config=e};return s.prototype.uploadFile=function(e,t){try{var r=this;!function(e,t){if(null===e.bucketName||""===e.bucketName)throw new Error("Your bucketName cannot be empty ");if(null===e.region||""===e.region)throw new Error("Must provide a valide region in order to use your bucket");if(null===e.accessKeyId||""===e.accessKeyId)throw new Error("Must provide accessKeyId");if(null===e.secretAccessKey||""===e.secretAccessKey)throw new Error("Must provide secretAccessKey");if(!t)throw new Error("File cannot be empty")}(r.config,e);var s=new FormData,c=r.getFileNameWithExtension(e,t),u=(r.config.dirName?r.config.dirName+"/":"")+c,m=(p=r.config).s3Url&&""!==p.s3Url?p.s3Url:function(e){var t=e.bucketName,r=e.region,n=r.split("-")[0];switch(n){case"cn":return"https://"+t+".s3."+r+".amazonaws.com."+n;default:return"https://"+t+".s3-"+r+".amazonaws.com"}}(p);return s.append("key",u),s.append("acl","public-read"),s.append("Content-Type",e.type),s.append("x-amz-meta-uuid","14365123651274"),s.append("x-amz-server-side-encryption","AES256"),s.append("X-Amz-Credential",r.config.accessKeyId+"/"+i+"/"+r.config.region+"/s3/aws4_request"),s.append("X-Amz-Algorithm","AWS4-HMAC-SHA256"),s.append("X-Amz-Date",n),s.append("x-amz-meta-tag",""),s.append("Policy",o.getPolicy(r.config)),s.append("X-Amz-Signature",a.getSignature(r.config,i,o.getPolicy(r.config))),s.append("file",e),Promise.resolve(fetch(m,{method:"post",body:s})).then(function(e){return e.ok?Promise.resolve({bucket:r.config.bucketName,key:(r.config.dirName?r.config.dirName+"/":"")+c,location:m+"/"+(r.config.dirName?r.config.dirName+"/":"")+c,status:e.status}):Promise.reject(e)})}catch(e){return Promise.reject(e)}var p},s.prototype.deleteFile=function(e){try{return Promise.resolve(fetch("https://"+this.config.bucketName+".s3"+(this.config.region?"-"+this.config.region:"")+".amazonaws.com/"+(this.config.dirName?this.config.dirName+"/":"")+e,{method:"delete"})).then(function(t){return t.ok?Promise.resolve({ok:t.ok,status:t.status,message:"File Deleted",fileName:e}):Promise.reject(t)})}catch(e){return Promise.reject(e)}},s.prototype.getFileNameWithExtension=function(t,r){return r&&r.includes(".")?r:(r||e.generate())+"."+t.type.split("/")[1]},s}); //# sourceMappingURL=react-aws-s3.umd.js.map