Пример использования: получение до 5 изображений, прикрепленных к одной записи crm, из базы данных crm. Эти прикрепленные изображения затем отображаются в галерее изображений при открытии веб-страницы записи html.
В настоящее время мы пишем ответ двоичного изображения API на сервер приложения с помощью fs.writeFile (). Затем html считывает изображение из папки сервера.
Проблема в том, что когда изображения загружаются в первый раз, а страница html загружается в первый раз, ничего не отображается и и в консоли возникает ошибка 404.
Как избежать этой проблемы? Я знаю, что вы можете обойти загрузку изображений на сервер приложений путем потоковой передачи или передачи данных напрямую на клиентскую сторону?
Вот как мы сейчас настроили код:
Сервер nodejs
const http = require('http');
const fs = require('fs');
const express = require('express');
const app = express();
app.set('view engine', 'ejs');
app.get('/property', function(req, res) {
var content = responseContent.body;
var filename = responseContent.filename;
// *ITEM GET RESPONSE* //
inputItem = {};
inputItem.id = req.query.id; // id: record-id
inputItem.module = 'Properties';
crmRestClient.API.MODULES.get(inputItem).then(function(response_item) {
var response_item = JSON.parse(response_item.body);
var response_item = response_item.data[0];;
if(response_item.Files !== null) {
// Loop through attached images
for (var i = 0; i < response_item.Files.length; i++) {
var image = response_item.Files[i];
// *MEDIA DOWNLOAD RESPONSE* //
var inputContent = {};
inputContent.id = req.query.id;
inputContent.module = 'Properties';
inputContent.relatedId = image.attachment_Id;
inputContent.download_file = true;
crmRestClient.API.ATTACHMENTS.downloadFile(inputContent).then(function(responseContent) {
const content = responseContent.body;
// Buffer image data
base64data = Buffer.from(content, 'binary').toString('base64');
})
}
}
res.render('property', {qs: req.query, response_item:response_item, image_data:base64data})
})
})
html
<% if(response_item.Files !== null) { %>
<% for (var i = 0; i < response_item.Files.length; i++) { %>
<% var image = response_item.Files[i]; %>
<div class="swiper-slide" data-swiper-slide-index="0" style="width: 474.333px;">
<a href="data:image/jpg;base64,<%= image_data %>" data-toggle="gallery-top" title="<%= image.file_Name %>">
<img class="img-fluid" src="data:image/jpg;base64,<%= image_data %>" alt="PIC 01">
</a>
</div>
<% } %>
<% } %>
Как я могу настроить это так, чтобы он выводился напрямую в html без предварительной загрузки изображений на сервер?
С уважением, тэмин