Тайм-аут из App Engine при загрузке файлов в Google Storage? - PullRequest
0 голосов
/ 16 марта 2019

Что-то не так с (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
}
...