Что-то не так с (i) моим кодом или (ii) с Google App Engine. Это должен быть мой код.Я использую Expres
s, Multer
, GAE
и Google Storage
.
Ниже приведены 2 простых маршрута для загрузки некоторых изображений.Логика следующая (см. Код ниже):
- загрузка изображений в память GAE (=
/tmp
) - оптимизация / изменение размера изображений с использованием
sharp
и imagemin
- загрузка оптимизированных изображений в Google Storage
Моя проблема:
- Все работает локально
- Когда он работает в Google App Engine,Я могу загрузить одно или два изображения в зависимости от размера, но если размер / время превышает XYZ, он возвращает ошибку 500 без каких-либо журналов ...
У вас есть идеи, что происходит?Какое-то время ожидания: загрузка 4 картинок по 1 МБ каждая занимает немного времени ...?Как я могу решить это?Thx.
A / упрощенный Get
маршрут
router.get('/a', (req, res) => {
try {
res.send(
<form action="/app/login" enctype="multipart/form-data" method="post">
<input type="file" name="upload" multiple="multiple" />
<button class="button" type="submit">
Save
</button>
</form>
)
} catch (e) {
logger.error(e)
}
})
B / упрощенный post
маршрут
router.post('/a', upload.array('upload', 4), async (req, res) => {
try {
await optimizeAndSaveImages(req.files)
res.redirect(`somewhere`)
} catch (e) {
logger.error(e)
}
})
C.optimizeAndSaveImages
фн
const optimizeAndSaveImages = async files => {
const pics = files.map(async pic => {
// resize original image and convert to JPEG
const resizedPic = await sharp(pic.buffer)
.resize({ width: 2000 })
.jpeg({ quality: 100 })
.toBuffer()
// optimize resized image
const optimizedPic = await imagemin.buffer(resizedPic, {
plugins: [optimizeJPEG()]
})
// generate image filename
const picFilename = generateID()
// save optimized image to GCP Storage
await bucket.file(picFilename).save(optimizedPic, {
contentType: 'image/jpeg',
cacheControl: 'private'
})
// return image
return picFilename
})
// imagesUrl is an array of image full URL
const images = await Promise.all(pics)
return images
}