Здесь есть два правила:
T*
и U*
нет неявных отбрасываний, если T и U - разные типы. T*
до T const *
неявно. («указатель на T» можно отнести к «указателю на const T»). В C ++, если T
также является указателем, это правило также может быть применено к нему (цепочка). Итак, например:
char**
означает: указатель на указатель на char.
И const char**
означает: указатель на указатель на const char.
Поскольку указатель на char и указатель на const char имеют разные типы, которые не различаются только в const-ness, поэтому актерский состав не допускается. Правильный тип cast to должен быть const указателем на char.
Таким образом, чтобы оставаться const корректным, вы должны добавить ключевое слово const, начиная с самой правой звездочки.
Таким образом, char**
может быть отличным до char * const *
и также может быть добавлено к const char * const *
.
Это цепочка только C ++. В C это цепочка не работает, поэтому на этом языке вы не можете корректно наложить более одного уровня указателей const.
Хотя s3 SDK прекрасно работает, но я использовал простой поток из AWS для чтения и отправки фрагментов данных в ответ.
Используйте getObject () для загрузки файлов из корзины s3. Смотрите следующий пример: -
var stream = require('stream');
const s3 = require('../config/s3.config.js');
exports.doDownload = (req, res) => {
const s3Client = s3.s3Client;
const params = s3.downloadParams;
params.Key = req.params.filename;
s3Client.getObject(params)
.createReadStream()
.on('error', function(err){
res.status(500).json({error:"Error -> " + err});
}).pipe(res);
}