Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/76: Рейтинг темы: голосов - 76, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 5

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

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

Студворк — интернет-сервис помощи студентам
в Django проекте cформировал отчет в виде XLS файла.
Не могу понять как его теперь скачать на локальный компьютер?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2015, 11:22
Ответы с готовыми решениями:

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

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

Как скачать файл в django?
Доброго времени суток, есть модель AAA, в моделе поле ImageField, с сервера в request.FILES.get("photo") приходит изображение ...

6
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
26.03.2015, 11:32
Допустим, файл лежит на диске. Вот так я посылаю его пользователю (код из обработчика запроса):
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  [ТС]
Спасибо, получилось!
Удивляюсь, что ответ на мой взгляд оказался совсем не таким тривиальным,
как мне казалось!
Странно, я не видел похожего кода в книгах и документации Django
Может я плохо смотрел, Удачи и спасибо еще раз!

Добавлено через 30 минут
Код работает, но похоже есть еще вопрос.
Как в этом случае удалить на сервере файл, уже ненужный после его отправки пользователю?
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
26.03.2015, 12:30
Например, после fp.close() или после open, можешь удалить через os.remove(имя_файла).
0
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 5
26.03.2015, 13:28  [ТС]
Я не понял, ведь если файл становится ненужным уже после выхода из обработчика?
код вроде этого уже не работает
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
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
26.03.2015, 13:31
Ну да, я уже забыл, что мы его размер проверяем и тип.
0
1 / 1 / 1
Регистрация: 20.04.2017
Сообщений: 267
28.05.2019, 10:00
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.05.2019, 10:00
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru