fileUploader.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /**
  2. * fileUploader
  3. */
  4. module.exports = function(crowi) {
  5. 'use strict';
  6. var aws = require('aws-sdk')
  7. , debug = require('debug')('crowi:lib:fileUploader')
  8. , Promise = require('bluebird')
  9. , Config = crowi.model('Config')
  10. , config = crowi.getConfig()
  11. , lib = {}
  12. ;
  13. lib.getAwsConfig = function()
  14. {
  15. return {
  16. accessKeyId: config.crowi['aws:accessKeyId'],
  17. secretAccessKey: config.crowi['aws:secretAccessKey'],
  18. region: config.crowi['aws:region'],
  19. bucket: config.crowi['aws:bucket']
  20. };
  21. };
  22. // lib.deleteFile = function(filePath, callback) {
  23. // // TODO 実装する
  24. // };
  25. //
  26. lib.uploadFile = function(filePath, contentType, fileStream, options) {
  27. var awsConfig = lib.getAwsConfig();
  28. if (!Config.isUploadable(config)) {
  29. return new Promise.reject(new Error('AWS is not configured.'));
  30. }
  31. aws.config.update({
  32. accessKeyId: awsConfig.accessKeyId,
  33. secretAccessKey: awsConfig.secretAccessKey,
  34. region: awsConfig.region
  35. });
  36. var s3 = new aws.S3();
  37. var params = {Bucket: awsConfig.bucket};
  38. params.ContentType = contentType;
  39. params.Key = filePath;
  40. params.Body = fileStream;
  41. params.ACL = 'public-read';
  42. return new Promise(function(resolve, reject) {
  43. s3.putObject(params, function(err, data) {
  44. if (err) {
  45. return reject(err);
  46. }
  47. return resolve(data);
  48. });
  49. });
  50. };
  51. lib.generateS3FileUrl = function(filePath) {
  52. var awsConfig = lib.getAwsConfig();
  53. var url = 'https://' + awsConfig.bucket +'.s3.amazonaws.com/' + filePath;
  54. return url;
  55. };
  56. return lib;
  57. };