Search code examples
htmlreactjsfile-upload

How to reset ReactJS file input


I have file upload input:

<input onChange={this.getFile} id="fileUpload" type="file" className="upload"/>

And I handle upload this way:

getFile(e) {
    e.preventDefault();
    let reader = new FileReader();
    let file = e.target.files[0];
    reader.onloadend = (theFile) => {
        var data = {
            blob: theFile.target.result, name: file.name,
            visitorId:  this.props.socketio.visitorId
        };
        console.log(this.props.socketio);
        this.props.socketio.emit('file-upload', data);
    };
    reader.readAsDataURL(file);
}

If I upload same file twice, then upload event is not fired. How can I fix that? For simple js code it was enough to do the following: this.value = null; in change handler. How can I do it with ReactJS?


Solution

  • I think you can just clear the input value like this :

    e.target.value = null;
    

    File input cannot be controlled, there is no React specific way to do that.


    Edit For old browsers (<IE11), you can use one of the following techniques.

    See http://jsbin.com/zurudemuma/1/edit?js,output (tested on IE10 & 9)