![](/img/trans.png)
[英]NestJS/Express return PDF file from external URL in response
[英]How to return a simple image from external API using NestJs?
我已經使用這個新框架有一段時間了,用它編寫代碼很有趣,但是我遇到了麻煩並且被卡住了,所以我在這里尋求幫助:)
我的問題在其他框架或語言中很常見。 我需要從外部 API 獲取圖像,例如我正在調用以下 URL:
https://s2.coinmarketcap.com/static/img/coins/32x32/1.png
但是有一個小問題,在我最終的應用程序中我不知道我正在尋找的圖像的 id 是什么,看到在上面 url 的末尾有一個數字 + ".png" 這個數字是 id在這種情況下的加密貨幣。 所以,如果我想得到這個標志/圖像,只知道加密貨幣的名稱,我必須查詢另一個 URL 並搜索它的 ID,這不是問題,而且我實際上很容易實現:
public getImageByName(name: string): Observable<any> {
return this.fetchCMCFullData()
.pipe(
map(entry => {
return Object.keys(entry)
.map(entradaKey => {
return entry[entradaKey];
})
.find(valorMapeado => valorMapeado.slug == name);
}),
)
.pipe(
mergeMap(resultado =>
this.httpService
.get(
'https://s2.coinmarketcap.com/static/img/coins/32x32/' +
resultado.id +
'.png',
{
headers: {
'Content-Type': 'image/png',
},
},
)
.pipe(map(response => response.data)),
),
);
}
正如您可能理解的那樣,“fetchCMCFullData”向我返回獲取加密貨幣 ID 所需的數據,然后我查詢它的圖像,我的問題是我收到的不是圖像,而是一大杯二進制通心粉:
�PNG
IHDR D���gAMA���asRGB���PLTELiq���F��A����<����U�(����"��5��D��>����F��8��3��!��#��B��C��C��E��H��?��B��#��'��#��%��"�U��$��'���!��G��(��'��3��E��?��I��G��L��J��K��Q��K��J��K��*��@��;��1��9��;��5��/��=��6��;��;��+��-��1��.��)������������������F�� ��$��$�� ��J��I������K��8��L��-����)��-��M��L������-������)��.��8�����������2��3��8��:��C�� ��F��0��"��5��>��5��<��'��,��(��+��;��$��D�������%��*��/��A��E��@��4��)��&��������.��A����?�������K��@��*��!��&��I��.����B����#�������������!��G��/��O��;��9��e��y���ٯ�����u�����b��E��H��D��&��#��E��"����5��%��J��L��H��K��M��9��<��A��1��8��<��0��+����$�������ϙ�М�֩�ԣ�Ă�̒��o��Q�����ʎ��w�ƅ�����Y����Ɔ��0��5��1��������������������ح��7�զ�����M�����������V��8�����~��P�͕����џ�����T�Ƈ����m�����]���۳#�jtRNS�� ��������%''�&3���3������
���������+���������`����������֛������`(���Ό�����a���``��+`������,��VY5eIDAT8�U�uXSQ��� ��������`ww��±R���1`0�Al������8�^g�����{�=�� ���L�Ե{�NݻΚ��E�p�ع��];���m۹k{��Ii����v��u�������#��8�rO�$^��.�$��:��r�%��hcy��X�u
��4pX�Ma�f�.4��k�����;��h4V��Wx��5g��r����|���(9...٤��9�N�E�[ �hS;�<{�h���_�I��EjHU��'
��ޞ"��a��_�+W ��깷�G�>+HD�*�
�QT\�pD������/���A���ܹ ���@o�<��CQy.��I�t&P����E�����b���j�e� ����X����V��)dε>�T>գ�JQ���Qvt����JNBw�7I��"%K�A��\�Ǭ*e{A� >�-��r�>�W�>(5'đ��
���j�� +y��yq�,�$*C�XS�C$�AŹ����H%?�Q��(��uH�B��>P&������.S��z.�{E�>A�U������1�P�J%k/��B|�
�lt|�D�RZ���F*���-��rK�����#*,ۤ���m[���b�!�(^�[��z�4O��O˶l�#|S�Y�J���8�]B$>��$��Y�/��-c64]�Ɋze�|�-�b!�+�n�hA'~�����,�=�Qm�
(�otfS�S�8����rY\��K��5չ ��j��n��2�r9��U�t�oŶ�D�մ٩C"�L��Ɍ��:qB��99�K�gfΰ�2gf�ϛ�������×6x���O�Q�/���1IEND�B`�
我一直在嘗試使用響應頭和更多參數,但我無法實現它,所以請幫助:(
另外我的控制器方法如下:
@Get('getExchangeIMG/:exchangeName')
returnExchangeIMG(@Param('exchangeName') exchName) {
return this.exchangeCordinatorService.getImageByName(exchName);
}
提前准備好
經過幾天的研究,我發現了這個問題,NestJs 用於請求的底層庫 axios-http 存在問題,它將所有內容保存在 JSON 中,因此如果我想獲取二進制代碼圖像,它將將其作為字符串保存在 JSON 中,並將破壞二進制文件。
要解決此問題,我們必須將 JSON 上的已解析二進制文件解析為 Buffen,然后將其轉換為 base64,例如:
res.send({
imagen: Buffer.from(response.data, 'binary').toString(
'base64',
),
extension: 'base64',
}),
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.