uploader.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. 'use strict';
  2. var fs = require('fs');
  3. var config = require('config');
  4. var s3 = null;
  5. // use AWS S3 or local folder depending on config
  6. if (config.get("storage_local_path")) {
  7. var AWS = require('mock-aws-s3');
  8. AWS.config.basePath = config.get("storage_local_path");
  9. s3 = new AWS.S3();
  10. } else {
  11. var AWS = require('aws-sdk');
  12. var storage_endpoint = config.get("storage_endpoint");
  13. const ep = new AWS.Endpoint(storage_endpoint);
  14. AWS.config.update(new AWS.Config({
  15. accessKeyId: process.env.MINIO_ACCESS_KEY,
  16. secretAccessKey: process.env.MINIO_SECRET_KEY,
  17. region: config.get("storage_region"),
  18. s3ForcePathStyle: true,
  19. signatureVersion: 'v4'
  20. }));
  21. s3 = new AWS.S3({
  22. endpoint: ep
  23. });
  24. }
  25. s3.createBucket({
  26. Bucket: config.get("storage_bucket"),
  27. ACL: "public-read",
  28. GrantRead: "*"
  29. }, (err,res) => {
  30. console.log("createBucket",err,res);
  31. });
  32. module.exports = {
  33. removeFile: (path, callback) => {
  34. const bucket = config.get("storage_bucket");
  35. s3.deleteObject({
  36. Bucket: bucket, Key: path
  37. }, (err, res) => {
  38. if (err){
  39. console.error(err);
  40. callback(err);
  41. }else {
  42. callback(null, res);
  43. }
  44. });
  45. },
  46. uploadFile: function(fileName, mime, localFilePath, callback) {
  47. if (typeof(localFilePath)!="string") {
  48. callback({error:"missing path"}, null);
  49. return;
  50. }
  51. console.log("[storage] uploading", localFilePath, " to ", fileName);
  52. const bucket = config.get("storage_bucket");
  53. const fileStream = fs.createReadStream(localFilePath);
  54. fileStream.on('error', function (err) {
  55. if (err) {
  56. console.error(err);
  57. callback(err);
  58. }
  59. });
  60. fileStream.on('open', function () {
  61. s3.putObject({
  62. Bucket: bucket,
  63. Key: fileName,
  64. ContentType: mime,
  65. Body: fileStream
  66. }, function (err) {
  67. if (err){
  68. console.error(err);
  69. callback(err);
  70. } else {
  71. const url = config.get("storage_cdn") + "/" + fileName;
  72. console.log("[s3]" + localFilePath + " to " + url);
  73. callback(null, url);
  74. }
  75. });
  76. });
  77. }
  78. };