Ajax-загрузка файлов устанавливает имя файла в случайную строку символов

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

js/html:

<script>
    function downloadFile(){
        var filename = 'data.txt';
        $.ajax({
            url: 'downloadFile',
            data: {'filename': filename},
            success: function(blob, status, xhr){
                var disposition = xhr.getResponseHeader('Content-Disposition');
                if (disposition && disposition.indexOf('attachment') != -1){
                    var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
                    var matches = filenameRegex.exec(disposition);
                    if (matches != null && matches[1]){
                        filename = matches[1].replace(/['"]/g,'');
                    }
                }
                var bd = [];
                bd.push(blob);
                var typename = "application/" + filename;
                var downloadURL = window.URL.createObjectURL(new Blob(bd, {type: typename}));
                var a = document.createElement("a");
                a.href = downloadURL;
                document.body.append(a);
                a.click();
            }
        });
    }
</script>

...


<button id="downloadFile" type="button" onclick="downloadFile()"><i class="fa fa-download"></i></button>

...

django views.py:

import pathlib
import os

def downloadFile(request):
    fname = request.GET.get('filename')
    fpath = os.path.join(<local_filesystem_path>, fname)
    # code to generate file here
    if pathlib.Path(fpath).exists():
        file_download = open(fpath, 'rb')
        response = HttpResponse(file_download, content_type='application/{}'.format(fname))
        response['Content-Disposition'] = 'attachment; filename="{}"'.format(fname)
    return response

и urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('downloadFile', views.downloadFile, name='downloadFile')
]

Когда я нажимаю кнопку загрузки, все работает правильно, за исключением того, что мой файл был переименован в случайную строку из 8 символов. Каждый раз, когда я повторно загружаю его, строка меняется, но она всегда состоит из 8 символов. Я предполагаю, что происходит что-то, где мой браузер думает, что имя файла не задано, поэтому он присваивает случайную строку. Но я хотел бы установить его на что-то, что я указал - как я могу это сделать?

Попробуйте добавить атрибут download к создаваемому тегу <a>. Это позволит вам задать имя файла.

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download

Вернуться на верх