В Nest.js, как обслуживать статические файлы содержимого, связанные с моим объектом JSON, в моем ответе API - PullRequest
0 голосов
/ 17 марта 2019

В моем Nest.js API у меня есть GET, который должен возвращать строку ответа, вместе с (до) 6 файлами изображений (в кодировке base64), в Response.

Что я могу сделать это:

6 столбцов в БД содержат уникальные имена файлов (фактические изображения находятся в папке «image-uploads»), и вместе с путем я могу использовать декоратор @Res для отправки любого одного из них назад, например

@Get('/findVehicleEntry/:id')
async findVehicleEntry(@Param('id') id: number, @Res() res) {
    const resVehicle: Vehicle = await this.vehiclesService.findVehicleEntry(id);
    if (resVehicle) {
        res.sendFile(resVehicle.photo1, { root: 'image-uploads' });
    }
}

Выше успешно загружает один файл изображения в виде Content-Type: "application / octet-stream"

Мой план (и я не знаю, как это сделать):

Во-первых, получите изображение из папки и в переменную , затем запустите на нем кодировку base64, затем установите resVehicle.photo1 равным этой строке base64 и сделайте то же самое для остальных 5 изображений , затем сделайте res.send (resVehicle);

Примерно так:

@Get('/findVehicleEntry/:id')
    async findVehicleEntry(@Param('id') id: number, @Res() res) {
    const resVehicle: Vehicle = await this.vehiclesService.findVehicleEntry(id);
    if (resVehicle) {
        let image = something.get('resVehicle.photo1', 'my/path/to/image-uploads');
        image = Buffer.from(image).toString('base64');
        resVehicle.photo1 = image;
        // do the same for the other 5 images
        res.send(resVehicle);
    }
}

Это первый раз, когда я использовал Nest / Express / Node, фактически это первый API, который я написал, поэтому моя идея / дизайн могут быть полностью отключены. Любые предложения приветствуются. Большое спасибо.

Редактировать: читать, что кодирование больших файлов с помощью base64 не очень хорошая идея. Я рад отбросить идею base64, главный вопрос в том, как получить мой объект JSON строки БД и 6 изображений в одном ответе?

1 Ответ

0 голосов
/ 21 апреля 2019

Вы правы, что кодировка изображений base64 не очень хорошая идея.

Традиционное решение здесь: Вы не выдвигаете изображения , вы указываете путь к изображению в своем ответе json и позволяете потребителю API использовать путь для получения изображения.

  • хранит фактические файлы изображений в общедоступной папке, а не в базе данных. Это означает, что он должен быть доступен из браузера, например, yourdomain.com/images/image232.jpg
  • в вашей базе данных, сохраните путь к этим изображениям в виде строки (image1: "yourdomain.com/images/image232.jpg")
  • отправить ваш ответ JSON, содержащий путь ({make:"Toyota", image1:"yourdomain.com/images/image232.jpg"})
  • Тот, кто использует ваш API, может затем использовать путь для получения изображения.
...