Javascript 如何使用busboy上传带有标题的单个文件
我正在尝试使用react作为前端和busboy在后端处理上传,将标题为的图像上传到云存储,但我似乎无法让它工作。提交表单时,我收到一个错误,指出event.target.files[0]未定义。有什么建议吗 反应码Javascript 如何使用busboy上传带有标题的单个文件,javascript,reactjs,google-cloud-functions,google-cloud-storage,busboy,Javascript,Reactjs,Google Cloud Functions,Google Cloud Storage,Busboy,我正在尝试使用react作为前端和busboy在后端处理上传,将标题为的图像上传到云存储,但我似乎无法让它工作。提交表单时,我收到一个错误,指出event.target.files[0]未定义。有什么建议吗 反应码 handleSubmit = (event) => { event.preventDefault(); const image = event.target.files[0]; const formData = new Form
handleSubmit = (event) => {
event.preventDefault();
const image = event.target.files[0];
const formData = new FormData();
formData.append('image', image, image.name);
formData.append('title', this.state.title);
this.props.addPost(formData)
};
<form onSubmit={this.handleSubmit}>
<TextField name="title" type="text" label="Title"placeholder="Add a title"/>
<input type="file" id="imageInput"/>
<Button type="submit" variant="contained" color="primary" className={classes.submitButton} disabled={loading}>
Submit
</Button>
</form>
您已将handleSubmit绑定到表单,但在代码中执行以下操作:
handleSubmit = (event) => {
event.preventDefault();
const image = event.target.files[0];
由于处理程序绑定到表单,因此event.target引用表单。并且表单没有files属性,因此会显示错误消息
您需要查找输入并调用该输入上的文件[0]
在中,您通常通过在字段中定义ref属性来进行响应:
<input type="file" id="imageInput" ref="imageInput" />
您为什么不只是使用Firebase提供的云存储web客户端SDK?您可以完全绕过该函数,直接上传到bucket。我只是暂时使用Firebase存储来测试api。过了一段时间,我将使用另一台服务器处理文件,使用firebase处理api和函数。谢谢,这对我帮助很大!前端现在工作得很好,但我仍然从服务器获得500的响应状态。在Firebase函数日志中,它表示我从用户获取的字段uniName和我试图传递到新帖子的前端字段传递的标题未定义。既然用户中存在uniName字段,并且标题被发送到api函数,那么这怎么可能呢?当我提交表单时,我收到一个错误,表明event.target.files[0]未定义。有什么建议吗?我的回答解决了这个问题。请将您的问题限制为单个问题,而不一定是整个用例。看见
<input type="file" id="imageInput" ref="imageInput" />
const input = this.refs.imageInput;
const image = imageInput.files[0];