node.js初学者です。
■背景
現在、node.jsでユーザーからpostされた画像を別のAPIにpostし、結果をユーザーに返すプログラムを作成しています。
■問題点
node.jsのserver側で受信すると以下のような形式で受け取りました
<中略> path: '/ig/ig', payload: { img_file: <Buffer ff d8 ff e0 00 ... 299480 more bytes> }, plugins: {}, <中略>
まだ、node.jsから下記の処理はAPIに正常に送信できていることを確認しています。
javascript
1 const result = new Promise(function(callback) { 2 const FormData = require('form-data'); 3 const form = new FormData(); 4 const fs = require('fs'); 5 const file = fs.createReadStream('./20211125234647_1.jpg'); 6 form.append('img_file', file); 7 const head = {headers: { 8 "content-type": "multipart/form-data" , 9 ...form.getHeaders(), 10 },}; 11 const axios = require('axios'); 12 axios.post(apiurl,form,head ) 13 .then(response => { 14 callback(JSON.stringify(response.data)); 15 }) 16 .catch(error => { 17 callback(JSON.stringify(error)); 18 }) 19 .finally(() => { 20 callback(JSON.stringify("error")); 21 }); 22 });
今回は一時ファイルなどを作成したくなく、postから受け取ったデータをそのままAPIに渡したいと考えています。
Bufferをそのまま渡すだけだとnode.js側でエラーとなってしまい、BufferからReadStream形式への変換方法もわからず、
検索してでた自動翻訳のページを元に試しましたが、うまくいきませんでした。
10時間以上この1点で止まってしまっているため、解決策に心当たりがある方はご教授願えないでしょうか。
追記 フォームは以下を利用しています。
http
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>File</title> 6</head> 7<body> 8 <form method="post" action="http://nodejsserver" enctype="multipart/form-data"> 9 <input type="file" id="img_file" name="img_file"> 10 <input type="submit" value="送信"> 11 </form> 12 <p> 13 </p> 14</body> 15</html>
追加で確認した内容
const { Readable } = require('stream');で変換する方式ですが、中身が入っていない?ような気がしています。
js
1 const imgdata = req.payload.img_file; 2 console.log(imgdata ); 3 console.log("↑受け取ったデータ"); 4 const { Readable } = require('stream'); 5 const stream = Readable.from(imgdata); 6 console.log(stream);
返ってきた値
log
1<Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff db 00 43 00 03 02 02 03 02 02 03 03 03 03 04 03 03 04 05 08 05 05 04 04 05 0a 07 07 06 ... 299480 more bytes> 2↑受け取ったデータ 3Readable { 4 _readableState: ReadableState { 5 objectMode: true, 6 highWaterMark: 16, 7 buffer: BufferList { head: null, tail: null, length: 0 }, 8 length: 0, 9 pipes: [], 10 flowing: null, 11 ended: false, 12 endEmitted: false, 13 reading: false, 14 sync: true, 15 needReadable: false, 16 emittedReadable: false, 17 readableListening: false, 18 resumeScheduled: false, 19 errorEmitted: false, 20 emitClose: true, 21 autoDestroy: true, 22 destroyed: false, 23 errored: null, 24 closed: false, 25 closeEmitted: false, 26 defaultEncoding: 'utf8', 27 awaitDrainWriters: null, 28 multiAwaitDrain: false, 29 readingMore: false, 30 decoder: null, 31 encoding: null, 32 [Symbol(kPaused)]: null 33 }, 34 _read: [Function: read], 35 _events: [Object: null prototype] {}, 36 _eventsCount: 0, 37 _maxListeners: undefined, 38 [Symbol(kCapture)]: false 39}
回答1件
あなたの回答
tips
プレビュー