Как сохранить файл Excel с помощью Flask REST API - PullRequest
0 голосов
/ 12 октября 2019

Я пытался реализовать простой API REST Flask, который бы принимал файл Excel и сохранял его в каталоге.

Ниже приведен фрагмент, который я использую

from flask import Flask, jsonify
from flask import abort
from flask import make_response
from flask import request
from werkzeug.utils import secure_filename
import os

app = Flask(__name__)

@app.route('/tasks/add', methods=['POST'])
def add_xlsx():
    file = request.files['ciq_file']
    if not file:
        return  jsonify({'error' : 'File is empty!'})

    fl_secure = secure_filename(file.filename)
    file.save('/data/prabir/t/testnew.xlsx', fl_secure)
    return jsonify({'status' : 'success'})

Но, когда я пытаюсь вызвать эту службу, она выбрасывает TypeError: an integer is required

(venv) [xyx@xyz t]$ curl -F 'ciq_file=@/data/prabir/somefile.xlsx' http://localhost:5000/tasks/add

Сбой команды Curl со следующей ошибкой:

File "/data/prabir/t/app.py", line 35, in add_xlsx
    file.save('/data/prabir/t/testnew.xlsx', fl_secure)
  File "/data/prabir/venv/lib/python2.7/site-packages/werkzeug/datastructures.py", line 2803, in save
    copyfileobj(self.stream, dst, buffer_size)
  File "/data/TRpython/lib/python2.7/shutil.py", line 63, in copyfileobj
    buf = fsrc.read(length)
  File "/data/TRpython/lib/python2.7/tempfile.py", line 605, in read
    return self._file.read(*args)
TypeError: an integer is required

Яне могу понять, что может быть потенциальной ошибкой, которую я делаю. Любая помощь будет оценена.

1 Ответ

1 голос
/ 12 октября 2019

Метод .save принимает до 2 аргументов: dst и buffer_size.

  • dst - это либо строка, указывающая путь к файлу, либо объект файла для записи.
  • buffer_size - это целое число, которое указывает размер буфера, который будет использоваться при записифайл.

Сейчас вы передаете две строки: '/data/prabir/t/testnew.xlsx' и fl_secure.

Возможно, вы захотите сделать это:

file.save('/data/prabir/t/' + fl_secure)

Это сохранитфайл по пути /data/prabir/t/ с исходным именем загружаемого файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...