сохранить CSV-файл в базе данных Postgres, используя колбу - PullRequest
0 голосов
/ 30 июня 2019

Я хочу сохранить свой CSV-файл в базе данных, используя колбу.во внешнем интерфейсе я написал функцию для отправки файла CSV в бэкэнд.Вот код:

    saveCsvFile = () => { 
         console.log('saveCsvFile ...', this.state.csvFile);
         axios.post( this.state.apiUrl+'/api/v1/SalesLead/saveCsv', {
            'csv_file':this.state.csvFile,
                },  {}  )

               };

  <form>
   <input onChange={this.fileHandler} type="file" accept=".csv,text/csv" />
   <button onClick={() => this.saveCsvFile()} type="submit" form="form1" value="Submit">Submit</button>
   </form>

И я написал простую функцию для чтения файла CSV в Python (колба).вот код:

@SalesLeadController.route('/saveCsv', methods=['POST'])

def upload_csv():

    print('upload_csv')

    if request.method == 'POST':

        csv_file = request.files['file']

        csv_reader = csv.reader(csv_file, delimiter=',')

        for row in csv_reader:

            user = SalesLead(username=row[0], email=row[1])

            db.session.add(user)

            db.session.commit()

        return Response(json.dumps({'status': 'success', 'message': 'data successfully saved.'}), status=200, mimetype='application/json')

Но я получаю эту ошибку после загрузки файла CSV:

400 Bad Request: KeyError: 'file'

Как я могу решить эту ошибку?

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Я думаю, что вы забыли добавить атрибут в форму: enctype="multipart/form-data"

0 голосов
/ 30 июня 2019
<form>
<input onChange={this.fileHandler} type="file" accept=".csv,text/csv" name = "file" />
</form>

Поскольку вы это делаете,

csv_file = request.files['file']

Здесь строка 'file' - это ключ, где значением является фактический загруженный файл.Ключ - это имя, указанное во входном теге в HTML

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