How can I create an equivalent code in JavaScript?
Given [‘col1’, ‘col2’] and [‘val1’, ‘val2’] OR ‘col1,col2rnval1,val2rn’
I want to be able to create a csv object without reading/writing to disk and then POST it.
Python:
JavaScript
x
15
15
1
from io import StringIO
2
import csv
3
import requests
4
5
f = StringIO()
6
w = csv.writer(f)
7
w.writerow(['col1', 'col2'])
8
w.writerow(['val1', 'val2'])
9
input_byte = f.getvalue().encode('UTF-8')
10
11
headers = {'Content-Type':"multipart/form-data"}
12
endpoint = "http://localhost:8085/predict"
13
files = {'file': ('input.csv', input_byte)}
14
response = requests.post(endpoint, files=files)
15
Here is my code in JavaScript so far:
JavaScript
1
17
17
1
let data = [['col1', 'col2'],
2
['val1', 'val2']];
3
// convert to csv format
4
let csvContent = data.map(e => e.join(",")).join("rn") + "rn";
5
// I believe FormData object is required to send multipart/form-data
6
// I do not think I am passing my csv data correctly
7
let body = new FormData();
8
let buff = Buffer.from(csvContent, "utf-8");
9
body.append("file", buff, {filename : 'input.csv'});
10
11
let response = await fetch("http://localhost:8085/predict",
12
{
13
method: 'POST',
14
body: body,
15
headers: {'Content-Type':"multipart/form-data"}
16
});
17
EDIT:
I was able to send a csv file but had to write it to a disk first. Is it possible to avoid it?
JavaScript
1
23
23
1
let data = [['col1', 'col2'],
2
['val1', 'val2']];
3
// convert to csv format
4
let csvContent = data.map(e => e.join(",")).join("rn") + "rn";
5
6
// save a csv file
7
let path = './files/' + Date.now() + '.csv';
8
fs.writeFile(path, csvContent, (err) => {
9
if (err) {
10
console.error(err);
11
}
12
});
13
14
let body = new FormData();
15
// this works :)
16
// but how can I create a csv buffer without writing to a disk?
17
body.append("file", fs.createReadStream(path), {filename : 'input.csv'});
18
let response = await fetch("http://localhost:8085/predict",
19
{
20
method: 'POST',
21
body: body,
22
});
23
Advertisement
Answer
I was able to solve my question with the following script:
JavaScript
1
18
18
1
const FormData = require('form-data');
2
const Readable = require('stream').Readable;
3
const fetch = require("node-fetch");
4
5
let data = [['col1', 'col2'],
6
['val1', 'val2']];
7
// convert to csv format
8
let csvContent = data.map(e => e.join(",")).join("rn") + "rn";
9
const stream = Readable.from(csvContent);
10
11
let body = new FormData();
12
body.append("file", stream, {filename : 'input.csv'});
13
let response = await fetch("http://localhost:8085/predict",
14
{
15
method: 'POST',
16
body: body,
17
});
18