Использование Ajax для загрузки .xlsx в серверную часть (python) - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь временно загрузить (прочитать файл, затем выбросить его. Я не хочу сохранять файл) .xlsx файл с моего фронта на сервер с помощью ajax-вызова (POST):

var data = new FormData();
data.append('file', file);


$.ajax({
  url: 'http://127.0.0.1:5555/upload',
  type: 'POST',
  data: data,
  cache: false,
  processData: false,
  contentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  success: function(result){
    print(result)
  } 
}); 

Файл доходит до серверной части сокола. Это мой внутренний код:

import json
import falcon
import http.client
from .services import FileReader

class Upload:
    def on_post(self, req, resp):
        data = req.bounded_stream.read()

        file = data

        observations = FileReader.GetObservationCount(file)
        observationJson = json.parse('{"observations": ' + observations + '}')

        resp.status = falcon.HTTP_200;
        resp.body = json.dumps(observationJson)

Как вы, наверное, видите, я использую статическую функцию GetObservationCount (file). Эта функция содержит следующий код:

def GetObservationCount(file):
  wb = load_workbook(file)
  wb = wb.active

  observationCount = True
  column = 'A'
  row = 1
  count = 0

  while observationCount:
    cell = column + str(row)

  if not wb[cell].value:
    observationCount = False
  else:
    count += 1
    row += 1

  return count - 1

Если я выполняю этот код, я получаю эту ошибку: openpyxl не поддерживает формат файла b '', (...) I 'Я хотел бы преобразовать (?) данные, отправленные с помощью вызова ajax, в файл .xslx. Но, похоже, я не могу найти способ заставить это работать.

Я попытался установить для параметра contentType Ajax-вызова значение false, но это не имеет значения. Что я могу сделать?

Заранее спасибо.

...