Javascript 如何使用busboy上传带有标题的单个文件

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

我正在尝试使用react作为前端和busboy在后端处理上传,将标题为的图像上传到云存储,但我似乎无法让它工作。提交表单时,我收到一个错误,指出event.target.files[0]未定义。有什么建议吗

反应码

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];