Я тестирую настройки и подключения Heroku и добавил CloudCube в приложение Express / Node, чтобы использовать его для хранения.
Я хотел подключиться, чтобы разрешить хранение файлов через свое приложение Heroku, я прикрепил к своему приложению Heroku дополнение под названием Cloudcube, которое предоставляет мне куб в их корзине S3 с учетными данными для доступа к среде. Я уверен, что правильно использовал учетные данные.
Я пытался заставить это соединение работать часами.
Что я пробовал до сих пор:
Я установил npm на aws-sdk, multer и multer-s3, потребовал их, затем использовал их в соответствии с рекомендациями, но переключил свои учетные данные и добавил ключ "dest" в настройке функции загрузки, чтобы указать на мой вложенный куб и требуемый каталог в корзине Cloudcube, это мое лучшее предположение о том, как это сделать:
aws.config.update({
secretAccessKey: process.env.CLOUDCUBE_SECRET_ACCESS_KEY,
accessKeyId: process.env.CLOUDCUBE_ACCESS_KEY_ID,
region: "eu-west-1"
});
const s3 = new aws.S3();
const upload = multer({
dest: "yutqk2v0mx6h/public/",
storage: multerS3({
s3: s3,
bucket: "cloud-cube-eu",
key: function(req, file, cb) {
console.log(file);
cb(null, file.originalname); //use Date.now() for unique file keys
}
})
});
Я тестирую это с использованием тестовых маршрутов, описанных в предыдущем сообщении, описанном в сообщении stackoverflow:
//open in browser to see upload form
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});
//use by upload form
app.post('/upload', upload.array('upl',1), function (req, res, next) {
res.send("Uploaded!");
});
Я пробовал много разных вариантов, но безуспешно.
Мой полный репозиторий для тестирования можно посмотреть здесь: https://github.com/malkhuzayyim/hasad-backend
В нем есть дополнительный код из предыдущего тестирования при настройке, все остальное работает, только статическая ошибка при загрузке файла.
При попытке загрузить я получаю эти журналы на своей панели регистрации журналов heroku:
2019-01-05T01:10:33.693468+00:00 heroku[router]: at=info method=GET path="/" host=hasad-backend.herokuapp.com request_id=782646c6-e150-44a5-bfb6-ff6a4b54c147 fwd="95.218.80.131" dyno=web.1 connect=0ms service=9ms status=200 bytes=899 protocol=https
2019-01-05T01:10:47.797075+00:00 app[web.1]: { fieldname: 'upl',
2019-01-05T01:10:47.797094+00:00 app[web.1]: originalname: '1f227fe3048fdf82d4dc52ca577c381d.jpg',
2019-01-05T01:10:47.797096+00:00 app[web.1]: encoding: '7bit',
2019-01-05T01:10:47.797098+00:00 app[web.1]: mimetype: 'image/jpeg' }
2019-01-05T01:10:47.906948+00:00 app[web.1]: AccessDenied: Access Denied
2019-01-05T01:10:47.906951+00:00 app[web.1]: at Request.extractError (/app/node_modules/aws-sdk/lib/services/s3.js:585:35)
2019-01-05T01:10:47.906953+00:00 app[web.1]: at Request.callListeners (/app/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
2019-01-05T01:10:47.906955+00:00 app[web.1]: at Request.emit (/app/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
2019-01-05T01:10:47.906956+00:00 app[web.1]: at Request.emit (/app/node_modules/aws-sdk/lib/request.js:683:14)
2019-01-05T01:10:47.906958+00:00 app[web.1]: at Request.transition (/app/node_modules/aws-sdk/lib/request.js:22:10)
2019-01-05T01:10:47.906959+00:00 app[web.1]: at AcceptorStateMachine.runTo (/app/node_modules/aws-sdk/lib/state_machine.js:14:12)
2019-01-05T01:10:47.906961+00:00 app[web.1]: at /app/node_modules/aws-sdk/lib/state_machine.js:26:10
2019-01-05T01:10:47.906963+00:00 app[web.1]: at Request.<anonymous> (/app/node_modules/aws-sdk/lib/request.js:38:9)
2019-01-05T01:10:47.906964+00:00 app[web.1]: at Request.<anonymous> (/app/node_modules/aws-sdk/lib/request.js:685:12)
2019-01-05T01:10:47.906966+00:00 app[web.1]: at Request.callListeners (/app/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
2019-01-05T01:10:47.906967+00:00 app[web.1]: at Request.emit (/app/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
2019-01-05T01:10:47.906968+00:00 app[web.1]: at Request.emit (/app/node_modules/aws-sdk/lib/request.js:683:14)
2019-01-05T01:10:47.906969+00:00 app[web.1]: at Request.transition (/app/node_modules/aws-sdk/lib/request.js:22:10)
2019-01-05T01:10:47.906971+00:00 app[web.1]: at AcceptorStateMachine.runTo (/app/node_modules/aws-sdk/lib/state_machine.js:14:12)
2019-01-05T01:10:47.906973+00:00 app[web.1]: at /app/node_modules/aws-sdk/lib/state_machine.js:26:10
2019-01-05T01:10:47.906974+00:00 app[web.1]: at Request.<anonymous> (/app/node_modules/aws-sdk/lib/request.js:38:9)
2019-01-05T01:10:47.906976+00:00 app[web.1]: at Request.<anonymous> (/app/node_modules/aws-sdk/lib/request.js:685:12)
2019-01-05T01:10:47.906977+00:00 app[web.1]: at Request.callListeners (/app/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
2019-01-05T01:10:47.906979+00:00 app[web.1]: at callNextListener (/app/node_modules/aws-sdk/lib/sequential_executor.js:96:12)
2019-01-05T01:10:47.906980+00:00 app[web.1]: at IncomingMessage.onEnd (/app/node_modules/aws-sdk/lib/event_listeners.js:299:13)
2019-01-05T01:10:47.906982+00:00 app[web.1]: at IncomingMessage.emit (events.js:187:15)
2019-01-05T01:10:47.906984+00:00 app[web.1]: at IncomingMessage.EventEmitter.emit (domain.js:441:20)
2019-01-05T01:10:47.906764+00:00 heroku[router]: at=info method=POST path="/upload" host=hasad-backend.herokuapp.com request_id=d025c4df-2a09-4a5b-bad8-f4a349cf3aa4 fwd="95.218.80.131" dyno=web.1 connect=1ms service=121ms status=403 bytes=560 protocol=https
Multer S3 Документацию можно посмотреть здесь: https://www.npmjs.com/package/multer-s3
Вы также можете увидеть документацию Cloudcube здесь: https://devcenter.heroku.com/articles/cloudcube
Мой API работает на https://hasad -backend.herokuapp.com /
Мне действительно нужно, чтобы это работало, поскольку я планирую использовать эту настройку для будущих проектов и использую этот курс в качестве прокси-сервера, чтобы ознакомиться с этой настройкой.
Какой-нибудь совет относительно лучших подходов, чтобы связать Heroku Express API с Cloudcube?
Буду очень признателен за помощь.
Большое спасибо.
Лучшее
MK