Как загрузить файл в приложение flask из элемента загрузки файла с помощью перетаскивания? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь загрузить файлы в приложение flask, размещенное на движке приложения. Кажется, я не могу получить файл, который можно увидеть в параметрах POST, в приложение flask.

Вот javascript, который выполняет дропзону и загрузку.

<script type="application/javascript">
function sendFile_(file) {
    const uri = "/upload_document";
    const xhr = new XMLHttpRequest();
    const fd = new FormData();
    xhr.open("POST", uri, true);
    xhr.setRequestHeader("Content-Type", 'multipart/form-data');
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            alert(xhr.responseText); // handle response.
            };
        };
    fd.append('file', file);
    // Initiate a multipart/form-data upload
    xhr.send(fd);
};

document.addEventListener('DOMContentLoaded', function() {
    const dropzone = document.getElementById("dropzone");
    dropzone_{{ approval_country['country'] }}.ondragover = dropzone.ondragenter = function(event) {
        event.stopPropagation();
        event.preventDefault();
        };

    dropzone.ondrop = function(event) {
        event.stopPropagation();
        event.preventDefault();

    const filesArray = event.dataTransfer.files;
    for (let i=0; i<filesArray.length; i++) {
        sendFile(filesArray[i]);
        };
    };
});
</script>

Я вижу файл в полезной нагрузке запроса в консоли. мое приложение выдает ошибку not found.

Вот код python, который находится в конечной точке '/ upload_document'

@app.route('/upload_document', methods=['POST']) # TODO ADD SECURITY To ROUTE
def upload_document():
    if request.method == 'POST':
        file = request.files.get('file')
        bucket = storage_client.bucket('myapp.appspot.com')
        blob = bucket.blob(file.filename)
        blob.upload_from_file(file)

        return "OK"

Я пробовал так много вариантов, работал ли он, когда это была простая форма, выполняющая загрузку, но не с зоной сброса на странице.

Любая помощь будет высоко ценится.

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