Как загрузить файл, используя вызов ajax в колбе - программирование
Подтвердить что ты не робот

Как загрузить файл, используя вызов ajax в колбе

Привет, я новичок в фляге, и я хочу загрузить файл, используя вызов ajax на сервер. Как упоминалось в документации, я добавил загрузку файла в html, как показано ниже:

<form action="" method=post enctype="multipart/form-data" id="testid">
 <table>
  <tr>
   <td>
     <label>Upload</label>
   </td>
   <td>
     <input id="upload_content_id" type="file" name="upload_file" multiple>
     <input type="button" name="btn_uplpad" id="btn_upload_id" class="btn-upload" value="Upload"/>

   </td>
  </tr>
 </table>
</form>

и я написал обработчик ajax как этот

$(document).ready(function() {
    $("#btn_upload_id" ).click(function() {           
        $.ajax({
            type : "POST",
            url : "/uploadajax",
            cache: false,
            async: false,
            success : function (data) {},
            error: function (XMLHttpRequest, textStatus, errorThrown) {}
        });
    });
});

Я не знаю, как получить загруженный файл (а не имя) из этого

  <input id="upload_content_id" type="file" name="upload_file" multiple>

и сохраните файл в папке. Я не совсем уверен, как читать файл из обработчика, который я написал:

@app.route('/uploadajax', methods = ['POST'])
def upldfile():
    if request.method == 'POST':
        file_val = request.files['file']

Буду признателен, если кто-нибудь сможет помочь. Заранее благодарю

4b9b3361

Ответ 1

Чтобы ответить на ваш вопрос...

HTML:

<form id="upload-file" method="post" enctype="multipart/form-data">
    <fieldset>
        <label for="file">Select a file</label>
        <input name="file" type="file">
    </fieldset>
    <fieldset>
        <button id="upload-file-btn" type="button">Upload</button>
    </fieldset>
</form>

JavaScript:

$(function() {
    $('#upload-file-btn').click(function() {
        var form_data = new FormData($('#upload-file')[0]);
        $.ajax({
            type: 'POST',
            url: '/uploadajax',
            data: form_data,
            contentType: false,
            cache: false,
            processData: false,
            async: false,
            success: function(data) {
                console.log('Success!');
            },
        });
    });
});

Теперь в вашей функции просмотра конечной точки флажка вы можете получить доступ к данным файла через файл flask.request.files.

На боковой ноте формы не являются табличными данными, поэтому они не входят в таблицу. Вместо этого вы должны прибегнуть к неупорядоченному списку или списку определений.

Ответ 2

Здесь он находится в учебнике.

from flask import send_from_directory

@app.route('/uploads/')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],
                               filename)

Вы можете вернуть то же самое к запросу POST. И тогда функция успеха AJAX может использоваться для отображения ответа.

Но для любой практической цели было бы неплохо сохранить имя файла с его связанным ресурсом в таблице отношений базы данных.