我在做一个用户可以上传多张照片的应用程序。当他们打开<input type="file" multiple>
时,我监听更改事件,创建这些文件的伪数组,并动态创建图像,供用户在上传前预览。
fauxArray = Array.from(e.target.files);
for (image of fauxArray) {
let newImage = document.createElement("IMG");
newImage.src = URL.createObjectURL(image);
}
我这样做是为了让用户可以决定不上传所有的文件,并且在实际保存到服务器之前删除一些文件。所以我在每个图像旁边都有一个按钮,如果他们使用它,我会相应地更改fauxArray。
当我尝试将此添加到fetch请求时发生问题。
const formData = new FormData();
formData.append( 'memoryPhotos', fauxArray ); // <- HERE
formData.append( 'memoryTitle', packageTitle );
formData.append( 'memoryDescription', packageDescription );
fetch("gui/save.php", {
method: "post",
body: formData,
})
因为在PHP端,当我用$_POST['memoryPhotos']
读取它时,我只得到字符串[object File],[object File]
(如果有2个文件等)。
如何将我的文件数组附加到要在服务器上读取的formdata?或者我是否使用了错误的格式来复制输入的图像?
1条答案
按热度按时间e4eetjau1#
你应该读取照片的数据并将它们序列化,例如作为数据url。要发布JS对象,您需要将其序列化为JSON并在php端使用
json_decode()
。您可以在JS模块中使用await Promise.all
,而无需 Packageasync
函数。