如何在 JavaScript 中創建等效代碼?
給定 ['col1', 'col2'] 和 ['val1', 'val2'] OR 'col1,col2\r\nval1,val2\r\n'
我希望能夠在不讀取/寫入磁盤的情況下創建一個 csv 物件,然后發布它。
Python:
from io import StringIO
import csv
import requests
f = StringIO()
w = csv.writer(f)
w.writerow(['col1', 'col2'])
w.writerow(['val1', 'val2'])
input_byte = f.getvalue().encode('UTF-8')
headers = {'Content-Type':"multipart/form-data"}
endpoint = "http://localhost:8085/predict"
files = {'file': ('input.csv', input_byte)}
response = requests.post(endpoint, files=files)
到目前為止,這是我在 JavaScript 中的代碼:
let data = [['col1', 'col2'],
['val1', 'val2']];
// convert to csv format
let csvContent = data.map(e => e.join(",")).join("\r\n") "\r\n";
// I believe FormData object is required to send multipart/form-data
// I do not think I am passing my csv data correctly
let body = new FormData();
let buff = Buffer.from(csvContent, "utf-8");
body.append("file", buff, {filename : 'input.csv'});
let response = await fetch("http://localhost:8085/predict",
{
method: 'POST',
body: body,
headers: {'Content-Type':"multipart/form-data"}
});
編輯:
我能夠發送一個 csv 檔案,但必須先將其寫入磁盤。有可能避免嗎?
let data = [['col1', 'col2'],
['val1', 'val2']];
// convert to csv format
let csvContent = data.map(e => e.join(",")).join("\r\n") "\r\n";
// save a csv file
let path = './files/' Date.now() '.csv';
fs.writeFile(path, csvContent, (err) => {
if (err) {
console.error(err);
}
});
let body = new FormData();
// this works :)
// but how can I create a csv buffer without writing to a disk?
body.append("file", fs.createReadStream(path), {filename : 'input.csv'});
let response = await fetch("http://localhost:8085/predict",
{
method: 'POST',
body: body,
});
uj5u.com熱心網友回復:
我能夠使用以下腳本解決我的問題:
const FormData = require('form-data');
const Readable = require('stream').Readable;
let data = [['col1', 'col2'],
['val1', 'val2']];
// convert to csv format
let csvContent = data.map(e => e.join(",")).join("\r\n") "\r\n";
const stream = Readable.from(csvContent);
let body = new FormData();
body.append("file", stream, {filename : 'input.csv'});
let response = await fetch("http://localhost:8085/predict",
{
method: 'POST',
body: body,
});
uj5u.com熱心網友回復:
你可以這樣嘗試:
let data = [['col1', 'col2'],
['val1', 'val2']];
// convert to csv format
let csvContent = data.map(e => e.map(val => JSON.stringify(val)).join(",")).join("\r\n") "\r\n";
let body = new FormData();
body.append("file", new File(csvContent, {type: "text/csv"}), 'input.csv');
let response = await fetch("http://localhost:8085/predict",
{
method: 'POST',
body: body,
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/495899.html
標籤:javascript CSV
