javascript 上传多个文件/图像、提取、表单数据

klh5stk1  于 2022-12-17  发布在  Java
关注(0)|答案(3)|浏览(123)

我想通过fetch()上传图片,我用的是formData,上传成功,但一次只能上传一张图片。

handleGetNewPictureDragDrop = data => {

        console.log(data);

        const formData = new FormData();

        for (let i = 0; i < data.length; i++) {
            formData.append('filename', data[i]);
        }

        console.log(...formData);

        const name = this.props.nameCategory;

        fetch('http://api.../gallery/' + name, {
            method: 'POST',
            body: formData,
        })
            .then(response => response.json())
            .then(success => console.log(success))
            .catch(error => console.log(error));
    }

控制台日志(数据):

控制台.log(...表单数据):

控制台日志(成功):

我采取3个图像,创建formData,有3个图像,但后,这个formData我得到上传只有一个。

ffx8fchx

ffx8fchx1#

将多个文件追加到表单数据时,请使用唯一键。

formData.append('file'+i, data[i]);
bxfogqkk

bxfogqkk2#

我认为您正在为每个图像传递相同的“名称”以进行附加。语法应该是

formData.append(name, value, filename);

字符串
第一个应该是字段名,如果不是唯一的,它将覆盖。
尝试使其动态化

for (let i = 0; i < data.length; i++) {
        formData.append(`filename_${i}`, data[i]);
    }

或者其他名称(数据中唯一的)可能更好,只是不要为每个图像传递相同的名称。

e0bqpujr

e0bqpujr3#

我也遇到过类似的问题,但使用的是PHP后端。唯一的formData键可以工作,但我发现经典的HTML符号工作得很好,只会在服务器上产生一个数组。

formData.append('file[]', data[i]);

我更喜欢这样,因为我可以使用与经典的<input type="file" multiple />相同的方法来处理这个问题。

相关问题