为什么 React 不上传图片到服务器?

Why React doesn't upload image to server?

我有一个应用程序在后端使用 React 和 Express,并使用 multer 来管理上传。当我使用邮递员进行测试时,服务器端是 运行 正确的,但是如果从反应发送图像的特征是意外的。在那种情况下,文件不会出现在上传文件夹中,但是邮递员会立即出现。

UploadPage,jsx

 const { register, handleSubmit } = useForm();

 const onSubmit = async (data)  => {
        const formData = new FormData();
        formData.append('petimage', data.petimage);
        try {
            const res = await axios.post('/api/petregister', formData);
            console.log(res)
        } catch (error) {
            setError(error.response.data.error);
            setTimeout(() => {
                setError("");
            }, 5000);
        } 
    }
    
    return (
        <Container className="mt-5">
                    <Form onSubmit={handleSubmit(onSubmit)}>
                        <Form.Group controlId="formFile" className="mb-3">
                            <Form.Label>Imagen de tu Mascota</Form.Label>
                            <Form.Control type="file" 
                                label="Select image"
                                name="petimage"
                                 {...register("petimage")}
                            />
                        </Form.Group>
                        <Button variant="primary" type="submit">
                            Submit
                        </Button>
                    </Form>
       </Container>

Google响应

名称为 petimage 的字段与我在后端指定并在邮递员测试中使用的字段相同。

编辑

const store = require('../middlewares/multer');

route.post('/petregister', store.array('petimage', 12), petregister);

最后一段代码是与 multer 中间件链接的路由,用于保存图像。

当您对后端进行 API 调用时,它会将图像上传到您在后端定义的特定文件夹,例如:

const multer = require('multer');
const upload = multer({ dest: 'folder path' });

我认为您得到的结果出乎意料,因为您在 formData formData.append('petimage', data.petimage); 中提供的图像名称即 petimage,它在 multer fileupload 方法中应该相同。您尚未共享后端代码。所以,我希望它可能是这样的:

var fileUpload = upload.single('petimage'); 当名称相同时,它可以正常工作。

如果图片比较大,可以压缩一下。请访问此 link,它一定会对您有所帮助。 https://dev.to/franciscomendes10866/image-compression-with-node-js-4d7h

你可以试试:

移除

formData.append('petimage', data.petimage);

并改用

data.petimage.forEach(pet => formData.append("petimage", pet))

解决方案是将图像特征化为对象。代码是下一个:

Object.values(data.petimage).forEach(pet => formData.append('petimage', pet))

然后它按预期工作了。