ファイルパスのように見えるファイル入力がありますが、fileReaderで次のエラーが発生します。
Uncaught TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'.
ここで何かが足りないような気がします。どこが間違っているのですか?
import React from 'react';
export default class TestPage extends React.Component {
constructor() {
super();
this.state = {
file: ''
}
}
onChange(e) {
let reader = new FileReader();
reader.onload = function(e) {
this.setState({file: reader.result})
}
reader.readAsDataURL(e.target.value);
}
render() {
return (
<div>
<input onChange={this.onChange.bind(this)} type="file" name="file" />
<br />
<video width="400" controls>
<source src={this.state.file} type="video/mp4" />
</video>
</div>
)
}
}
答えは非常に明白です、それはエラーの中にあります。 「パラメーター1はBlob型ではありません」-言い換えると、readAsDataURLはBlobを予期しますが、それは渡したものではありません。 readAsDataURLは、ファイルパスではなく、ファイルまたはブロブを読み取ることを特に意図しています。 一方、 FileReader.result
パラメータは最終的にStringまたはArrayBuffer になります。
おそらくやりたいことは "e.target.value"ではなく入力ファイル配列を渡す をreadAsDataURLに渡すことです。
onChange(e) {
let reader = new FileReader();
reader.onload = function(e) {
this.setState({file: reader.result})
}
reader.readAsDataURL(e.target.files[0]);
}