Flask send_from_directory не будет отправлять zip-файл - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь отправить zip-файл, хранящийся в static/downloads/67 с именем August_#1.zip. Все, что я пробовал, не работало, ничего не делало и не возвращало ошибок.

Я пытался использовать send_file со всеми различными типами строк каталога, такими как;static/download/67 and /Users/...

@app.route('/download')
def download():

    try:
        #print(directory[:-(len(name)+1)])
        #print(name)

        #static_file_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'static')
        #print(static_file_dir)

        #return send_from_directory(static_file_dir+"/downloads/67", "August_1.zip", as_attachment=True)

        url = request.args.get('url', 0, type=str)

        print(url)

        d = "/Users/<...>/static/downloads/67"

        return send_from_directory(d, "August_#1.zip")

    except Exception as e:

        #print("Error")

        return str(e)

    return "Nothing"

Я бы хотел, чтобы файл zip загружался в веб-браузер клиентов.

Я новичок в веб-разработке, поэтому не очень уверен в работе с колбой.

Спасибо.

Редактировать:

После некоторой помощи у меня возникла проблема с нажатием кнопки , код в index.html:

<div class="row" style="margin-bottom: 15px;margin-right: 0;margin-left: 0;">
<div class="col-md-6" style="padding-right: 0px;padding-left: 0%;width: 100%;">
<div class="d-flex justify-content-center align-items-center" style="margin-top: 0px;width: 100%;margin-left: 0px;height: 100%;padding-top: 6px;padding-bottom: 6px;"><input class="d-flex d-xl-flex justify-content-center m-auto align-items-xl-center" type="text" style="margin: 0px;padding: 0px;margin-right: 0px;width: 90%;height: 27px;padding-left: 5px;" name="url"></div>
</div>
<div class="col-md-6" style="padding-right: 0px;padding-left: 0px;">
<div class="d-flex justify-content-center justify-content-md-start justify-content-lg-start justify-content-xl-start align-items-xl-center" style="margin-top: 0px;width: 100%;height: 100%;padding-top: 6px;padding-bottom: 6px;"><button class="btn btn-primary text-center border-dark d-flex justify-content-center" style="height: 27px;padding: 0px;background-color: rgb(255,255,255);color: rgb(14,14,14);width: 20%;min-width: 90px;" type="button", id = "download" >Download</button></div>
</div>
</div>

...

    <script type=text/javascript> 
        $(function() {
            $('#download').bind('click', function() {
            $.getJSON('/download', {
                url: $('input[name="url"]').val(),
            });
            return false;
            });
        }); 
    </script> 

1 Ответ

1 голос
/ 11 октября 2019

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

<form class="row" style="margin-bottom: 15px;margin-right: 0;margin-left: 0;" action = "http://localhost:5000/download" method = "post">
...