У меня есть метод, который вызывается, передается имя файла, а затем выполняет API-вызов к внутреннему интерфейсу, чтобы получить предварительно авторизованную ссылку. Я пытаюсь добавить параметр (имя файла) в конец URL, но он вызывает мой запрос API к 404.
Как правильно передать параметр с моим запросом API и вернуть предварительно авторизованный URL-адрес в ответе?
Имена моих файлов также могут содержать пробелы, которые, как я подозреваю, могут иметь отношение к запросу, возвращающему 404.
Это звонок на мой интерфейс :
getPreauthorizedLink(fileName) {
console.log(fileName);
var fileName = fileName;
var url = 'reportPresignedURL/' + fileName;
fetch(config.api.urlFor(url))
.then((response) => response.json())
.then((url) => {
console.log(url);
});
}
И это реализация этого API на серверной части :
reports.get('/reportPresignedURL/:fileName', async (req, res) => {
const subscriberID = req.query.subscriberID || 0;
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
var params = {
Bucket: config.reportBucket,
Key: req.params.fileName,
Expires: 60 * 5
}
try {
s3.getSignedUrl('getObject', params, function (err, url) {
if(err)throw err;
console.log(url)
res.json(url);
});
} catch (err) {
res.status(500).send(err.toString());
}
});
Я попытался изолировать проблему до того, как я передаю параметр, выполнив следующие действия в front end :
getPreauthorizedLink(fileName){
console.log(fileName);
var fileName = fileName;
var testFileName = 'test';
var url = 'reportPresignedURL/' + testFileName.replace(/ /g, '%20').replace(/\//g, '%2F');
fetch(config.api.urlFor(url))
.then((response) => response.json())
.then((url) => {
console.log(url);
});
}
Вот как я указываю маршрут API в config.js:
reportPresignedURL: '/reports/reportPresignedURL',
Я также попытался указать это так:
reportPresignedURL: '/reports/reportPresignedURL/:fileName',
Для вашей информации, я добавил этот маршрут API в мой config.js во внешнем интерфейсе.