Извините, но я не могу опубликовать комментарий к вашему вопросу выше из-за отсутствия репутации, поэтому я включу его в этот ответ.
Сделайте, как указано выше, создав подписанный Url, но вместо используя service-account.json. Я думаю, вам нужно использовать serviceAccountKey.json, который вы можете создать (замените YOURPROJECTID соответственно)
https://console.firebase.google.com/project / YOURPROJECTID / settings / servicesaccounts / adminsdk
Пример:
const gcs = require('@google-cloud/storage')({keyFilename: 'serviceAccountKey.json'});
// ...
const bucket = gcs.bucket(bucket);
// ...
return bucket.upload(tempLocalFile, {
destination: filePath,
metadata: {
contentType: 'image/jpeg'
}
})
.then((data) => {
let file = data[0]
file.getSignedUrl({
action: 'read',
expires: '03-17-2025'
}, function(err, url) {
if (err) {
console.error(err);
return;
}
// handle url
})
Tomcat «проверит» корневой URL-адрес веб-приложения, чтобы проверить, успешно ли он развернут. Если вы используете IDE для управления сервером, он может выполнять дополнительные проверки. Однако действительно странно, что он вызывается три раза, а не один или, возможно, два раза.
Что получается?
@WebServlet(
name = "IndexServlet",
urlPatterns={ "/", "/home" },
initParams = { @WebInitParam(name = "sortBy", value = Constants.POPULAR) })
При явном сопоставлении его по шаблону URL-адреса /
вы сделали его сервлетом по умолчанию для веб-приложения! Каждый отдельный запрос, который не соответствует шаблону URL-адреса любого явно зарегистрированного сервлета, попадет в этот сервлет. Обычно это те запросы, которые попадают в статические ресурсы, такие как CSS, JS и файлы изображений. Как правило, servletcontainer уже предоставляет сервлет по умолчанию из коробки. Tomcat, например, имеет DefaultServlet
для самой цели.
Итак, представьте, что файл index.jsp
, в свою очередь, ссылается на CSS и JS-файл, затем один запрос на /home
три раза вызовет сервлет (и браузер будет для этого CSS и JS-файла получить неуничтомый вывод HTML из index.jsp
вместо желаемого вывода CSS и JS).
Избавиться шаблона URL /
. Это неправильный способ получения сервлета «домашней страницы». Вместо этого добавьте <welcome-file>home</welcome-file>
в web.xml
. Не принимайте задание сервлета по умолчанию из контейнера, если вы действительно не знаете, что делаете.
Я думаю, это может произойти, потому что вы запускаете свой сервер из IDEA или Eclipse, который проверяет, хорошо ли ваше развертывание или нет. Я согласен с ответом Ульриха, вы должны вызвать URL-адрес, используя curl или wget. И попробуйте запустить сервер не из IDE (если есть).