Вот мой код: Ключевым моментом является загрузка файла handlefileupload. Я не знаком с файлом e.target.file [0]. И я хочу попытаться получить доступ к локальному пути к выбранному файлу с помощью e.target.file. Но я не знаю как. Если не можете, есть ли другой способ сделать это. Причина, по которой я хочу получить доступ к пути, - преобразовать csv в файл json.
Получив путь, я хочу использовать этот пакет https://www.npmjs.com/package/convert-csv-to-json, чтобы преобразовать его в файл json.
import React, { useState } from 'react';
import * as XLSX from 'xlsx';
import DataTable from 'react-data-table-component';
function App() {
const [columns, setColumns] = useState([]);
const [data, setData] = useState([]);
// process CSV data
const processData = dataString => {
const dataStringLines = dataString.split(/\r\n|\n/);
const headers = dataStringLines[0].split(/,(?![^"]*"(?:(?:[^"]*"){2})*[^"]*$)/);
const list = [];
for (let i = 1; i < dataStringLines.length; i++) {
const row = dataStringLines[i].split(/,(?![^"]*"(?:(?:[^"]*"){2})*[^"]*$)/);
if (headers && row.length === headers.length) {
const obj = {};
for (let j = 0; j < headers.length; j++) {
let d = row[j];
if (d.length > 0) {
if (d[0] === '"')
d = d.substring(1, d.length - 1);
if (d[d.length - 1] === '"')
d = d.substring(d.length - 2, 1);
}
if (headers[j]) {
obj[headers[j]] = d;
}
}
// remove the blank rows
if (Object.values(obj).filter(x => x).length > 0) {
list.push(obj);
}
}
}
// prepare columns list from headers
const columns = headers.map(c => ({
name: c,
selector: c,
}));
setData(list);
setColumns(columns);
}
// handle file upload
const handleFileUpload = e => {
const file = e.target.files[0];
console.warn(file);
const reader = new FileReader();
reader.onload = (evt) => {
/* Parse data */
const bstr = evt.target.result;
const wb = XLSX.read(bstr, { type: 'binary' });
/* Get first worksheet */
const wsname = wb.SheetNames[0];
const ws = wb.Sheets[wsname];
/* Convert array of arrays */
const data = XLSX.utils.sheet_to_csv(ws, { header: 1 });
processData(data);
};
reader.readAsBinaryString(file);
}
return (
<div>
<input
type = "file"
accept = ".csv,.xlsx,.xls"
onChange = {handleFileUpload}
/>
<DataTable
pagination
highlightOnHover
columns = {columns}
data = {data}
/>
</div>
);
}
export default App;
Кстати, я не понимаю, как использовать этот пакет: npmjs.com/package/convert-csv-to-json. Но после того, как я ввел две команды npm, он показал, что не могу найти этот модуль. Вы знаете, почему это произошло? Я добавил код let csvToJson = require ('convert-csv-to-json');
Проверьте свой package.json, чтобы узнать, установлен ли пакет
да ... больше всего сбивает с толку то, что в package.json есть
И, кстати, почему target.value получает путь C: \ fakepath \ Book1.csv. Как я могу получить настоящий локальный путь?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте e.target.value, чтобы получить путь