NodeまたはNode Fetch POST request?でAPIを呼び出そうとしています。 CSVまたはXLSファイルをインポートします。これはNodeまたはNode Fetch?
README.md
言う:
要求と応答の両方で、本体にネイティブストリームを使用します。
そして ソースはいくつかのタイプをサポートしていることを示します 、たとえばStream
、Buffer
、Blob
...などであり、またString
他のタイプの場合。
以下のスニペットは、v1.7.1または2.0.0-alpha5で動作する3つの例を示します(FormData
でさらに下にある他の例を参照)。
let fetch = require('node-fetch');
let fs = require('fs');
const stats = fs.statSync("foo.txt");
const fileSizeInBytes = stats.size;
// You can pass any of the 3 objects below as body
let readStream = fs.createReadStream('foo.txt');
//var stringContent = fs.readFileSync('foo.txt', 'utf8');
//var bufferContent = fs.readFileSync('foo.txt');
fetch('http://httpbin.org/post', {
method: 'POST',
headers: {
"Content-length": fileSizeInBytes
},
body: readStream // Here, stringContent or bufferContent would also work
})
.then(function(res) {
return res.json();
}).then(function(json) {
console.log(json);
});
ここは foo.txt
:
hello world!
how do you do?
注意: http://httpbin.org/post
送信されたリクエストの詳細を含むJSONで返信します。
結果:
{
"args": {},
"data": "hello world!\nhow do you do?\n",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip,deflate",
"Connection": "close",
"Content-Length": "28",
"Host": "httpbin.org",
"User-Agent": "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)"
},
"json": null,
"Origin": "86.247.18.156",
"url": "http://httpbin.org/post"
}
より多くのパラメーターを含むフォームの一部としてファイルを送信する必要がある場合は、次を試してください。
npm install form-data
FormData
オブジェクトを本体として渡します(FormData
は、 Stream
library を介して、CombinedStream
の一種です。 =)header
を渡さないでください(上記の例とは異なります)そして、これは動作します:
const formData = new FormData();
formData.append('file', fs.createReadStream('foo.txt'));
formData.append('blah', 42);
fetch('http://httpbin.org/post', {
method: 'POST',
body: formData
})
結果(送信内容を表示するだけ):
----------------------------802616704485543852140629
Content-Disposition: form-data; name="file"; filename="foo.txt"
Content-Type: text/plain
hello world!
how do you do?
----------------------------802616704485543852140629
Content-Disposition: form-data; name="blah"
42
----------------------------802616704485543852140629--
node-fetch
を使用してmultipart/form-data
および GitHubのドキュメントで実際にこれを行う方法 を使用してファイルをアップロードする方法を探していました。以下は、FormData
にバッファをアタッチしてアップロードする方法を示す修正された例です。
const FormData = require('form-data');
const form = new FormData();
const buffer = // e.g. `fs.readFileSync('./fileLocation');
const fileName = 'test.txt';
form.append('file', buffer, {
contentType: 'text/plain',
name: 'file',
filename: fileName,
});
fetch('https://httpbin.org/post', { method: 'POST', body: form })
.then(res => res.json())
.then(json => console.log(json));
私がやったように、「node-fetch upload file multipart」をグーグルで検索した他の人と共有します。