угловая функция загрузки файлов js не работает должным образом - PullRequest
1 голос
/ 10 марта 2019

, используя angular, чтобы сделать функцию загрузки файла и флешку в качестве внутреннего сервера. Однако, когда я пытаюсь загрузить файл, всегда появляется сообщение об ошибке. Вот коды.

Элементы HTML:

        <input class="paper-trade__upload-button_hidden" type="file" id="csv-upload" name="file" accept=".csv" ngf-max-size="2MB" (change)="csvToArray($event)">

Угловой:

    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 Ответ

1 голос
/ 11 марта 2019

Наконец-то я нашел решение этой проблемы: удалите персонал 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)),
);

но я до сих пор не могу понять, почему ...

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