0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 5
1

Как скачать сформированный в Django файл на компьютер пользователя?

26.03.2015, 11:22. Показов 14007. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
в Django проекте cформировал отчет в виде XLS файла.
Не могу понять как его теперь скачать на локальный компьютер?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2015, 11:22
Ответы с готовыми решениями:

Как скачать сформированный в Django файл на компьютер пользователя?
в Django проекте cформировал отчет в виде XLS файла. Как его отправить пользователю на...

Как скачать через JS сформированный файл php
у меня создается на сервере файл c помощью php скрипта: $file = 'Реестр от '.date('Y-m-d...

Как скачать файл в django?
Доброго времени суток, есть модель AAA, в моделе поле ImageField, с сервера в...

Как выдать сформированный файл пользователю через браузер?
Реализован механизм формирования отчета в виде документа OpenOffice. Проблема в том, как из этого...

6
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
26.03.2015, 11:32 2
Допустим, файл лежит на диске. Вот так я посылаю его пользователю (код из обработчика запроса):
Python
1
2
3
4
5
6
7
8
9
10
11
         fp = open(excel_file_name, "rb");
         response = HttpResponse(fp.read());
         fp.close();
         file_type = mimetypes.guess_type(excel_file_name);
         if file_type is None:
             file_type = 'application/octet-stream';
         response['Content-Type'] = file_type
         response['Content-Length'] = str(os.stat(excel_file_name).st_size);
         response['Content-Disposition'] = "attachment; filename=excel_file.xlsx";
 
         return response;
2
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 5
26.03.2015, 12:12  [ТС] 3
Спасибо, получилось!
Удивляюсь, что ответ на мой взгляд оказался совсем не таким тривиальным,
как мне казалось!
Странно, я не видел похожего кода в книгах и документации Django
Может я плохо смотрел, Удачи и спасибо еще раз!

Добавлено через 30 минут
Код работает, но похоже есть еще вопрос.
Как в этом случае удалить на сервере файл, уже ненужный после его отправки пользователю?
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
26.03.2015, 12:30 4
Например, после fp.close() или после open, можешь удалить через os.remove(имя_файла).
0
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 5
26.03.2015, 13:28  [ТС] 5
Я не понял, ведь если файл становится ненужным уже после выхода из обработчика?
код вроде этого уже не работает
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        excel_file_name = question_id
        fp = open(excel_file_name, "rb");
        response = HttpResponse(fp.read());
        fp.close();
        os.remove(excel_file_name)
        
        file_type = mimetypes.guess_type(excel_file_name);
        if file_type is None:
            file_type = 'application/octet-stream';
        response['Content-Type'] = file_type
        response['Content-Length'] = str(os.stat(excel_file_name).st_size);
        response['Content-Disposition'] = "attachment; filename=report.xlsx";
    
        return response;
Добавлено через 7 минут
Все работает, спасибо!
Только удалять файл нужно пониже
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        excel_file_name = question_id
        fp = open(excel_file_name, "rb");
        response = HttpResponse(fp.read());
        fp.close();
        
        file_type = mimetypes.guess_type(excel_file_name);
        if file_type is None:
            file_type = 'application/octet-stream';
        response['Content-Type'] = file_type
        response['Content-Length'] = str(os.stat(excel_file_name).st_size);
        response['Content-Disposition'] = "attachment; filename=report.xlsx";
        os.remove(excel_file_name)
 
        return response;
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
26.03.2015, 13:31 6
Ну да, я уже забыл, что мы его размер проверяем и тип.
0
1 / 1 / 1
Регистрация: 20.04.2017
Сообщений: 267
28.05.2019, 10:00 7
Velesthau,
привет не подскажешь я тоже пытаюсь скачать файл на пк пользователю но он не дает мне это сделать доходя до print(6)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@csrf_exempt
def table(request):
    if request.POST:
        print(1)
        shutil.copy("media/xl1.xlsx", "media/xl2.xlsx") 
        destination_filename = "media/xl2.xlsx"
        print(2)
        d1 = request.POST["d1"]
        d2 = request.POST["d2"]
        d3 = request.POST["d3"]
        d4 = request.POST["d4"]
        a = request.POST["a"]
        b2 = request.POST["b2"]
        b3 = request.POST["b3"]
        b4 = request.POST["b4"]
        c2 = request.POST["c2"]
        print(3)
        wb = openpyxl.load_workbook('media/xl2.xlsx')
        print(4)
        worksheet = wb['Лист1'] 
        worksheet["B4"]= int(d1)
        worksheet["C4"]= int(d2)
        worksheet["D4"]= int(d3)
        worksheet["E4"]= int(d4)
        worksheet["B5"]= int(a)
        worksheet["C6"]= int(b2)
        worksheet["D6"]= int(b3)
        worksheet["E6"]= int(b4)
        worksheet["C7"]= int(c2)
        print(5)
        wb.save('xl2.xlsx')
        print(6)
        fp = open(destination_filename, "rb");
        response = HttpResponse(fp.read());
        fp.close();
        file_type = mimetypes.guess_type(destination_filename);
        if file_type is None:
            file_type = 'application/octet-stream';
        response['Content-Type'] = file_type
        response['Content-Length'] = str(os.stat(destination_filename).st_size);
        response['Content-Disposition'] = "attachment; filename=xl2.xlsx";
        return response;
        print(7)
    return render(request,'table.html', {})
0
28.05.2019, 10:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2019, 10:00
Помогаю со студенческими работами здесь

Как скачать изображение из <img> через django?
Доброго времени суток, есть задача с помощью django скачать фотографию из тега img Так как никак...

Скачать файл по ссылкам из файла из интернета на компьютер
Скачать файл по ссылкам из файла из интернета на комп - C# Добавлено через 23 минуты WebClient...

Как давать пользователю скачать файл с сайта не по прямой ссылке,чтобы он не смог скачать его 2 раза по той же ссылке?
Грубо говоря, надо давать пользователю скачать файл, если он ввёл правильный пароль. Чтобы он не...

XML - записать уже сформированный файл
Доброго времени суток, есть код: ЗаписьXML = Новый ЗаписьXML;...

сформированный файл, обработать результаты чемпионата
Вот задачка,я не могу никак решить....В чемпионате из футбола принимает участие 16 команд....

Как узнать имя пользователя, который запустил данный командный файл от имени другого пользователя?
Вопрос задаю в ветке PowerShell, т.к. скорее его средствами, нежели средствами одного только...

Как скачать с телефона Lg B2250 фотографии на компьютер?
Привет всем. У меня проблема , не могу скачать с телефона Lg B2250 фото на компьютер. Шнур купили ,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru