#python #angular #flask
#python #angular #flask
Вопрос:
использование angular для создания функции загрузки файла и flask в качестве внутреннего сервера. Однако, когда я пытаюсь загрузить файл, всегда получаю сообщение об ошибке. Вот коды.
HTML-элементы:
<input class="paper-trade__upload-button_hidden" type="file" id="csv-upload" name="file" accept=".csv" ngf-max-size="2MB" (change)="csvToArray($event)">
Angular:
csvToArray(fileInput: any) {
const hotInstance = this.hotRegisterer.getInstance(this.instance);
let fileReaded = fileInput.target.files[0];
this.tradeCaptureService.uploadPaperTradeCSV('KGI',
fileReaded).subscribe();
}
тело запроса:
uploadPaperTradeCSV(brokerName: string, file): Observable<Trade> {
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'multipart/form-data',
}),
};
let formData: FormData = new FormData();
formData.append('file', file);
return this.http.post<Trade>(`${this.baseUrl}/trade/upload?broker_name=${brokerName}`, formData, httpOptions)
.pipe(
tap(data => console.log(data)),
);
}
Исходные коды (python): в качестве запроса.запишите требования, отправьте данные файла в виде данных формы
@hello.route('/upload', methods=['POST'])
@jwt_required
def import_trades():
if request.method == 'POST':
broker_name = request.args.get('broker_name', '')
data = request.form.get('file')
if 'file' not in request.files:
return jsonify({'fail': 'no file found'})
file = request.files['file']
if not file.filename:
return jsonify({'fail': 'no file selected'})
file_format = file.filename.split('.', 1)[1].lower()
allowed_extension = set(['csv'])
if file and file_format in allowed_extension:
filename = secure_filename(file.filename)
file_path = os.path.join(UPLOAD_FOLDER, filename)
file.save(file_path)
response = trade_orm.convert_file_data(broker_name, file_path)
if os.path.exists(file_path):
os.remove(file_path)
return response
else:
return jsonify({'fail': 'please input valid info'})
Как бы я ни пытался загрузить файл, он всегда возвращает сообщение «файл не найден».Покупка при использовании Postman для отправки запроса это работает нормально.Я застрял здесь на довольно долгое время…..
Любая помощь была бы очень признательна, спасибо за помощь
Комментарии:
1. И что это за сообщение об ошибке
2. ‘файл не найден’, почему-то он просто не может найти ключевое слово ‘file’ в запросе. Файлы.
Ответ №1:
Я, наконец, нахожу решение этой проблемы, удаляю параметр ‘const httpOptions = {}’ в методе uploadPaperTradeCSV (), тогда все будет работать хорошо.итак, новый код будет выглядеть следующим образом
uploadPaperTradeCSV(brokerName: string, file): Observable<Trade> {
let formData: FormData = new FormData();
formData.append('file', file);
return this.http.post<Trade>(`${this.baseUrl}/trade/upload?broker_name=${brokerName}`, formData, httpOptions)
.pipe(
tap(data => console.log(data)),
);
но я все еще не могу понять, почему…