Javascript FormData';在Flask中创建的词典不正确

Javascript FormData';在Flask中创建的词典不正确,javascript,python,ajax,flask,form-data,Javascript,Python,Ajax,Flask,Form Data,我在请求中发送FormData时遇到ajax和flask连接问题 我正在尝试使用ajax从javascript发送一组文件: dropArea.addEventListener("drop", (event)=>{ event.preventDefault(); //preventing from default behaviour file = getDroppedOrSelectedFiles(event); file.then((value) =&g

我在请求中发送FormData时遇到ajax和flask连接问题

我正在尝试使用ajax从javascript发送一组文件:

dropArea.addEventListener("drop", (event)=>{
  event.preventDefault(); //preventing from default behaviour
  file = getDroppedOrSelectedFiles(event);

  file.then((value) => {
      res = []
      for (var v in value) {
          console.log(value[v].fileObject)
          res.push(value[v].fileObject)
      }
      var fd = new FormData();
      fd.append("file[]", res.serialize())
      for (var value of fd.values()) {
        console.log(value);
    }
      var req = {
          url: "/upload.html",
          method: "post",
          processData: false,
          data : fd
      };

      var promise = $.ajax(req);
  });

});
读一下烧瓶里的文件列表。我尝试了
files=request.form.getlist(“files[])
,但我只收到一个空列表。调查发现,如果我将
request.form
转换为字典,文件实际上就在那里,但键与“file[]”或文件的值都不对应

dict_items([('-----------------------------110480676136716695933348531592\r\nContent-Disposition: form-data; name', '"file[]"\r\n\r\n[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],[object File],,[object File]\r\n-----------------------------110480676136716695933348531592--\r\n')])


有人知道如何解决这个问题并获得文件列表吗?

您不能序列化
文件
对象。您必须将对象本身放入
FormData
,然后文件内容将在AJAX请求中发送

dropArea.addEventListener(“drop”,(事件)=>{
event.preventDefault();
文件=getDroppedOrSelectedFiles(事件);
然后((值)=>{
var fd=新FormData();
value.forEach(文件=>{
console.log(文件名);
fd.append(“文件[]”,文件);
用于(var v值){
console.log(值[v].fileObject)
fd.append(“文件[]”,值[v].fileObject)
}
var req={
url:“/upload.html”,
方法:“张贴”,
processData:false,
contentType:false,
数据:fd
};
var promise=$.ajax(req);
});

})
您不能序列化
文件
输入。什么是
getDroppedOrSelectedFiles()
?您应该在
for
循环中向
fd
追加,类似于
fd.append('file[],value[v].fileObject)
这是一个返回文件对象数组的函数,该数组包括文件夹中的所有文件以及删除/选定项目的子文件夹。如果我将附加放入for循环中,则在中看不到
fileObject
属性,现在字典有400000个键,而不是只有一个键。应该是这样吗?听起来像是个问题使用
getDroppedOrSelectedFiles
函数,它应该只返回已选择的文件。对象中是否有一个属性指示是否已在其中选择该文件?您可以添加
if
语句进行检查。字典中的键数与数据库中的文件数相同所选文件夹。似乎附加正在创建多个(键,值)对(使用一些奇怪的键名),而不是使用(key=“files[]”,value=文件列表)创建数据表单。这是它的工作方式。不能将数组直接放入FormData中。