Я должен отправить полученный файл (в формате байтового массива) другому API, который будет хранить его физически. Что я сделал до сих пор, так это то, что я получил файловые байтовые чанки по событию data запроса и добавил его в массив чанков, а когда данные были получены полностью, я объединил и создал буфер, а затем просто отправил эти данные буфера в другой API, используя axios
метод put.
export const putProduct: RequestHandler = async (req: Request, res: Response, next: NextFunction) => {
const chunks: Uint8Array[] = [];
req.on('data', (chunk) => chunks.push(chunk));
req.on('end', async () => {
try {
const data = Buffer.concat(chunks);
const response = await axios.put("REMOTE_API_URL", data);
return res.status(response.status).send(response.data);
} catch (error) {
return res.status(error.response.status).send(error.response.data);
}
});
};
Это работает нормально, и физический файл успешно сохранен на удаленной конечной точке API.
Теперь проблема с этим подходом заключается в том, что он создаст огромный Снижение производительности, так как эти чанки будут храниться в массиве (в памяти), а если размер файла огромен, то для его хранения потребуется достаточно много памяти.
Я хочу отправить отдельного человека куски байтов в непрерывном потоке, поскольку мы получаем его по событию data запроса. Я обнаружил, что axios
не имеет такой поддержки. Предложение о любой библиотеке, которая может сделать это или любой другой подход, который будет иметь возможность решить эту ситуацию, будет большой помощью.
Заранее спасибо!