#javascript #node.js #reactjs #fs-extra
#javascript #node.js #reactjs #fs-extra
Вопрос:
Я создал небольшую функциональность в react, в которой я могу успешно загрузить файл и сохранить его в состоянии. Я пытаюсь проанализировать содержимое файла с помощью библиотеки npm «fs-extra» и распечатать его на консоли. Но я не могу сделать это успешно. Ниже приведен код:
import * as fs from "fs-extra";
import axios from "axios";
export default class FileUpload extends React.Component<{}, { selectedFile: any, loaded: number }> {
constructor(props: any) {
super(props);
this.state = {
selectedFile: null,
loaded: 0
}
}
changeHandler = (event: any) => {
event.preventDefault();
this.setState({
selectedFile: event.target.files,
loaded: 0
})
}
clickHandler = async (event: any) => {
event.preventDefault();
const data = new FormData();
for (let x = 0; x < this.state.selectedFile.length; x ) {
console.log(fs.readFileSync(this.state.selectedFile[x], "utf-8"))
data.append('file', this.state.selectedFile[x])
}
axios.post("http://localhost:8080/test", data, {
}).then(res => {
console.log(res.statusText)
});
}
render() {
return (
<div className="container-fluid bg-secondary">
<div className="row">
<div className="col-md-6">
<form>
<div className="form-group">
<label htmlFor="exampleFormControlFile1">Example file input</label>
<input
multiple
onChange={this.changeHandler}
type="file"
className="form-control-file"
id="exampleFormControlFile1" />
<button
type="button"
className="btn btn-success btn-block"
onClick={this.clickHandler}
>Upload</button>
</div>
</form>
</div>
</div>
</div>
);
}
}
Я получаю следующую ошибку:
TypeError: Cannot read property 'native' of undefined
В чем проблема с этим кодом? Кроме того, как я могу достичь цели, которую я хочу достичь?
Комментарии:
1. Вы не можете использовать
fs-extra
его во внешнем интерфейсе, это модуль только для узла. FS означает файловую систему, она позволяет узлу выполнять операции с файловой системой, которые браузеру делать запрещено (потому что вы не хотите, чтобы веб-сайты могли видеть, как вы взаимодействуете с файлами вашего компьютера)2. Если я напишу отдельный файл, содержащий эту функциональность, это сработает? Или мне нужно будет использовать совсем другой подход?
3. Вам нужно либо использовать bundler для разрешения файла данных во время сборки и встроить его, либо передать его по HTTP и получить в свою программу через запрос REST с сервера.
4. Глядя на ваш цикл, вы, вероятно, захотите поместить файлы на сервер, а затем извлечь их через REST GET и поместить в память в конструкторе / начальной загрузке вашего приложения.