javascript Несколько запросов Ajax к Flask-python - только!один получил - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь перебрать несколько форм с типом входного файла и Ajax их до Колба

просмотр JavaScriptкак это: -

У меня есть список форм под переменной var upFC = document.getElementsByClassName('uploadImage');

каждая форма выглядит так: -

<form method=​"post" action=​"/​upload" enctype=​"multipart/​form-data" id=​"f_x" class=​"uploadImage">
   <input type=​"file" id=​"u_x">​
   <input type=​"submit" value=​"Submit" id=​"s_x">​
</form>​`

где x = [ 0 - 100 ]

затем Ajax файлы, которые я использовал этот метод

for (i = 0; i < upFC.length; i++) {

   var cFile = upFC[i].elements[0].files;
   var fileName = upFC[i].elements[0].value;

   const fd = new FormData();
   fd.append('file', cFile[i], rightName);
   const fdx = new XMLHttpRequest();
   fdx.open('post' , "/uploadIds" , true);
   fdx.send(fd);
   }

Код колбы выглядит следующим образом: -

@app.route('/uploadIds', methods=['POST' , 'GET'])
def handle_uploadIds():
   d = os.path.join(root,'uploads/')
   allImages = request.files.to_dict();
   print("\n\n activated - ids \n\n ")
   print("\n\n all images \n\n  == > ", allImages  )



   for file in allImages:
       print(f"----\n\n {allImages[file]} \n\n")
       fileName = allImages[file].filename
       dest = "/".join([d, fileName ])
       print(f"\n\n upload 1 is active :{fileName}\n\n")
       allImages[file].save(dest)

return '', 204

независимо от того, чтоМетод, который я пробую на фляге. Я всегда получаю первый файл правильно, а остальные циклы просто пустые .. без ошибок

Я также добавил журналы на стороне Javascript , чтобы увидеть,formData отправляет правильный файл каждый раз, когда он зацикливается, и да, это так.

по какой-то причине колба получает первый файл, а не остальные.

после применения этого кода для отслеживания formDataперед отправкой.

for (var pair of fd.entries()) {
console.log(pair[0]+ ', ' + pair[1]);}
}

на хромированной консоли я получаю это

file, [object File]
2 file, 

Печатная продукция из колбы в соответствии с моим cода

     all images

  == >  {'file': <FileStorage: 'PHNZIH1062_id.png' ('image/png')>}
---- 
 <FileStorage: 'PHNZIH1062_id.png' ('image/png')> 
 activated - ids 
 all images
  == > 
 upload 1 is active :PHNZIH1062_id.png
 {}

 activated - ids   
 all images
  == >  {}
127.0.0.1 - - [13/Dec/2018 21:06:15] "POST /uploadIds HTTP/1.1" 204 -
127.0.0.1 - - [13/Dec/2018 21:06:15] "POST /uploadIds HTTP/1.1" 204 -
127.0.0.1 - - [13/Dec/2018 21:06:15] "POST /uploadIds HTTP/1.1" 204 -

методы, которые я пробовал:

  • request.files.getlist('file'):
  • request.files.to_dict():
  • request.files.items():

некоторые из выделенных методов, которые я пробовал: все 3 метода по этой ссылке

Я не уверен, что проблема в колбе или ajax но, вероятно, он находится внутри колбы кода

1 Ответ

0 голосов
/ 14 декабря 2018

оказалось довольно простым, в конце концов, это была сторона клиента, все, что мне нужно было сделать, это изменить

var cFile = upFC[i].elements[0].files;

на

var cFile = upFC[0].elements[0].files;

, потому что это было [file object] местоположение.

...