Как принять файл отправленный через ajax в flask?
Отправляю файл с помощью такого кода: let input_file = document.getElementById('input-file')
input_file.addEventListener('change', function(e) {
let file = e.target.files[0];
$.ajax({
type: 'POST',
url: '/post/file',
cache: false,
processData: false,
contentData: false,
data: {
'file': file
},
success: function(res) {
console.log(res);
}
})
А на сервере пытаюсь получать файл так:
@posts.route('/post/file', methods=['POST'])
def download_file():
file = request.files['file']
Вылазит такая ошибка:
KeyError: 'file'
Ответы (1 шт):
Автор решения: Noskill
→ Ссылка
во фласке я не силен, но когда-то я делал так.
@app.route('/post/file', methods=['GET', 'POST'])
def download_file():
file = request.files.get('file')
file.save('./' + file.filename)
пришлось залезть в этот учебник "Flask Web development" и по нему программировать. не знаю, правильно получилось или нет.
#! /usr/bin/env python3
import os
from flask import Flask
app = Flask(__name__)
from flask import render_template, request, redirect, url_for, abort
from werkzeug.utils import secure_filename
app.config['MAX_CONTENT_LENGTH'] = 1024 * 1024
app.config['UPLOAD_EXTENSIONS'] = ['.jpg', '.png', '.gif']
app.config['UPLOAD_PATH'] = 'uploads'
@app.route('/')
def index():
return render_template('index.html')
@app.route('/', methods=['POST'])
def upload_files():
uploaded_file = request.files['file']
filename = secure_filename(uploaded_file.filename)
if filename != '':
file_ext = os.path.splitext(filename)[1]
if file_ext not in app.config['UPLOAD_EXTENSIONS']:
abort(400)
uploaded_file.save(os.path.join(app.config['UPLOAD_PATH'], filename))
return redirect(url_for('index'))