Как вы упомянули, вы можете использовать S3-адрес.Тот, который используется в Alexa Hosted Skills , накладывает ограничение в 60 секунд, но применяется на стороне S3.Вы можете настроить свое собственное ведро S3 для поддержки этого и установить свой тайм-аут.Если вы проверите файл util.js
в навыке Alexa Hosted, вы увидите что-то вроде этого:
const AWS = require('aws-sdk');
const s3SigV4Client = new AWS.S3({
signatureVersion: 'v4'
});
module.exports = {
getS3PreSignedUrl(s3ObjectKey) {
const bucketName = process.env.S3_PERSISTENCE_BUCKET;
const s3PreSignedUrl = s3SigV4Client.getSignedUrl('getObject', {
Bucket: bucketName,
Key: s3ObjectKey,
Expires: 60*1 // the Expires is capped for 1 minute
});
console.log(`Util.s3PreSignedUrl: ${s3ObjectKey} URL ${s3PreSignedUrl}`);
return s3PreSignedUrl;
}
}
Обратите внимание, что этот код использует стандартный AWS SDK для node.js.Ведро S3 взято из среды process.env.S3_PERSISTENCE_BUCKET
и является тем, которое налагает 60-секундный таймаут.Если вы измените свойство Expires
на более чем 60 секунд, вы в основном не сможете получить предварительно подписанный URL, если попытаетесь через 1 минуту.Но если вы передадите туда свое собственное ведро (и назначите его bucketName
), которое должным образом настроено для поддержки предварительно подписанных URL-адресов и тайм-аутов, превышающих 60 секунд, то ничто не мешает вам повторно использовать этот код (или эквивалентный код в Java) иполучите предварительно подписанный URL с любым сроком действия, который вы хотите.Параметр s3ObjectKey
- это относительный путь к файлу в корзине.Чтобы сделать это в Java, вы должны будете использовать этот SDK вместо .