【发布时间】:2018-02-23 18:25:40
【问题描述】:
我正在尝试将文件从 reatjs 上传到 firebase 存储。而且我还想将 url 保存在实时数据库中。我已经上传了文件,现在我想获取文件名以保存在数据库中。但是在使用 setState 方法将文件名保存在变量中时,它告诉我这是未定义的
handleSubmitFirebase(event) {
alert(this.state.avatarURL);
var docInfo = {
title: this.docnm.value,
path: this.state.avatarURL,
document_type: this.doc_type.value,
unm: this.unm.value,
D_id: DbConfig.database()
.ref("documents")
.push(docInfo).key
}; //documents info
DbConfig.database()
.ref("documents")
.push(docInfo);
this.docnm.value = ""; // <- clear the input
alert("Successfully Added");
}
handlePdfUploadSuccess(filename) {
alert(filename);
this.setState({ avatar: filename, progress: 100, isUploading: false }); //error line
DbConfig.storage().ref('upload/').child(filename).getDownloadURL().then(url => this.setState({ avatarURL: url }));
}
<form onSubmit={this.handleSubmitFirebase}>
<div className="form-group label-floating is-empty">
<label className="control-label">Document Name</label>
<input type="text" className="form-control" ref={el => (this.docnm = el)} onChange={this.handleChange} />
<span className="material-input"></span></div>
<div className="form-group label-floating is-empty">
<label className="control-label">Document type</label>
<div className="room-main">
<div className="online-est">
<select className="room-form" ref={el => (this.doc_type = el)}>
<option value="Circular">Circular</option>
<option value="User">User</option>
</select>
</div>
</div>
<span className="material-input"></span></div>
<div className="form-group label-floating is-empty">
<label className="control-label">User Name</label>
<div className="room-main">
<div className="online-est">
<select className="room-form">
{this.renderUserInput()}
</select>
</div>
</div>
<span className="material-input"></span></div>
<div className="form-group label-floating is-empty">
<label className="control-label">Document</label>
<FileUploader
accept="pdf,doc/*"
name="avatar"
randomizeFilename
storageRef={DbConfig.storage().ref('upload/')}
onUploadStart={this.handlePdfUploadStart}
onUploadError={this.handlePdfUploadError}
onUploadSuccess={this.handlePdfUploadSuccess}
/>
<img src={this.state.avatarURL}/>
<span className="material-input"></span></div>
<button type="submit" className="btn btn-fill btn-rose submit_btn">Submit</button>
</form>
【问题讨论】:
-
使用箭头功能。 handlePdfUploadSuccess = (filename) => { // 任务}。那么只有 this.state 会引用你组件的状态。
标签: reactjs firebase firebase-realtime-database firebase-storage