【发布时间】:2023-03-20 06:16:02
【问题描述】:
我正在尝试允许用户将图片上传到我的应用程序(React 前端、Node 后端)。我想将上传的文件从客户端发送到服务器,然后从我的服务器向将处理存储图像的 Firebase 云函数发出请求。
我的表单 HTML 如下:
<div className='LoafGalleryWrap'>
<h1 className='banner'>Illustrious Loafs</h1>
<form>
<label>Add a loaf to the exhibit:
<input type='file' onChange={props.fileSelectedHandler} />
<button onClick={props.fileUploadHandler}>Upload</button>
</label>
</form>
<button onClick={props.toggleDisplayLandingPage}>Back</button>
</div>
我使用以下方法在我的应用程序中获取文件数据。在 console.log 中,我可以看到要发送到服务器的文件数据。
fileUploadHandler(e) {
e.preventDefault();
e.stopPropagation();
let file = this.state.selectedFile;
let formData = new FormData();
formData.append('image', file);
formData.append('name', file.name);
const pic = formData.getAll('image');
console.log(formData)
axios({
url: 'http://localhost:3001/uploadLoaf',
method: 'POST',
data: formData,
headers: { "Content-Type": "multipart/form-data" }
})
.then(respo => console.log(respo))
}
在我的服务器中,当我检查请求正文时,那里什么都没有。我将其注销并简单地得到一个空对象。我试过使用 multer 和 connect-multipart 中间件,但没有一个能成功显示表单数据。我所做的与本文建议的 (https://www.geeksforgeeks.org/file-uploading-in-react-js/) 类似,但我不知道如何获取表单中发送的数据。非常感谢任何指导。
我的服务器路由如下:
app.post('/uploadLoaf', (req, res) => {
console.log('uploadLoaf endpoint reached');
console.log(req.body);
res.status(201).json('complete')
// axios.post('https://us-central1-sour-loafs.cloudfunctions.net/uploadFile/', 'upload_file', formData, {
// headers: {
// 'Content-Type': 'multipart/form-data'
// }
// })
// .then(result => {
// console.log(result);
// res.send(result);
// })
// .catch(err => {
// console.log(err);
// res.send(err)
// })
});
【问题讨论】:
标签: javascript node.js reactjs axios form-data