|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
Есть отчет, который по параметрам с формы формирует довольно большой XLSX файл (15-50мб). для формирования использую родную SDK DocumentFormat.OpenXml. формировать какого угодно большого XLSX-файла без обжорства памяти уже сделано. тут есть задача опубликовать формирование отчета в вебе. как принято решать задачу отдачи динамически формируемого большого файла в ASP.NET? 1. если просто в Response.OutputStream, потом сделать Flush. то весь файл будет в памяти IIS. такой вариант не подходит. 2. формировать во временный каталог, а потом TransmitFile, но нужно еще делать процедуру очистки файлов с сервака и прогресс скачки начнется после формирования на диске только 3. какой нибудь Response.BinaryWrite с переодическим Flush. как я понял тут проблема что неизвестна длина сразу. попробовал на текстовике (FF вроде сразу предлагает сохранить, а потом показывает что идет закачка, но сколько осталось не знает, что логично. А вот IE 11 ждет полной закачки, а потом дает открыть или сохранить) Код: c# 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.
как принято поступать? я с вебом не глубоко знаком, прошу совета ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 12:09 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
barrabas2. формировать во временный каталоги дать ссылу юзверю. Тогда представление не зависит от отчетника вообще. barrabasно нужно еще делать процедуру очистки файлов с сервака Это и есть работа программиста. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 13:07 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
Petro123barrabas2. формировать во временный каталоги дать ссылу юзверю. Тогда представление не зависит от отчетника вообще. barrabasно нужно еще делать процедуру очистки файлов с сервака Это и есть работа программиста. типа юзер на форме выбрал параметры (период и другие фильтры), нажимает показать отчет, а ему станицу со ссылкой чтоли? както не юзерфреднли, он и так уже сказал что хочет файл, зачем ему еще раз на ссылку жать? сделать то очистку не проблема. просто думал может как-то есть решение динамически пихать в поток файл по мере его создания и это бы. вариант вроде выглядит рабочим, смущает разное поведение в браузерах (что веб это боль я знаю), не хотелось бы в итоге наткнуться на какуюто хрень, что будет работать не у всех и через раз. Response.BufferOutput = false; Response.Buffer = false; Response.Write("e0"); Response.OutputStream.Flush(); Thread.Sleep(5000); Response.Write("e1"); Response.OutputStream.Flush(); Thread.Sleep(5000); Response.Write("e2"); или сразу уж делать через Response.TransmitFile и временный файл ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 13:56 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
barrabasтипа юзер на форме выбрал параметры (период и другие фильтры), нажимает показать отчет, а ему станицу со ссылкой чтоли? както не юзерфреднли, он и так уже сказал что хочет файл, зачем ему еще раз на ссылку жать?не жми повторно. В чем проблема? Если есть ссылка, то он хочет ждет. Не хочет, закрыл эксплорер и после обеда нажал. Ты н post начал делать отчет и канал в ожидании. У него часики. Если он прервал и опять GET то показал ссылку. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 14:25 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
barrabas, После POST всегда идет автоматический GET. Кто и где нажимает 2 раза? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 14:27 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
Petro123barrabas, После POST всегда идет автоматический GET. Кто и где нажимает 2 раза? Я так понял твой пост Petro123barrabas 2. формировать во временный каталог и дать ссылу юзверю. Тогда представление не зависит от отчетника вообще. что типа нужно сгенерировать файл во временный каталог по POST и дать ссылку юзеру (вывести ее на странице), собственно чтобы юзер по ней прошел и получил файл. но пройти по ссылке это же клик по ней. я неправильно понял что ты хотел сказать? В моём случае делать нужно будет полюбому через файл, т.к. DocumentFormat.OpenXml внезапно не поддерживает формирование в памяти, только в FileStream, хотя конструктор просит простой стрим и я думал заведется код в Response.OutputStream (. хотел потестить ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 14:33 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
Petro123, а, типа после формирования файла делать редирект на файл? лучше чем TransmitFile будет? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 14:39 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
barrabasно пройти по ссылке это же клик по ней. я неправильно понял что ты хотел сказать?да. Но кликнуть вместо юзверя это редирект. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 14:40 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
barrabasPetro123, а, типа после формирования файла делать редирект на файл? лучше чем TransmitFile будет?универсальнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 14:49 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
Petro123barrabasPetro123, а, типа после формирования файла делать редирект на файл? лучше чем TransmitFile будет?универсальнее. попробую, спасибо. я попробую. смущает что при редиректе светится расположение файлов и имя файла должно быть именно тем какое лежит в каталоге (должен быть добавлен к имени уникальный ключ какой-то, нелья просто report.xlsx сделать). еще не очень понятно что будет с формой задания параметров после редиректа (тут нужно проверять, я не в теме же), если я делаю редирект, то ухожу со страницы задания параметров, но куда? будет пустая страница и урл файла с адресной строке или страница с параметрами останется и урл тоже? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 14:56 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
barrabas, Можно редирект на саму себя. Только при GET _всегда_ проверять список готовых отчетов, и если есть вывести их во фрейме где запрашивал. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 15:01 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
ладно буду разбираться. но чисто для интереса на будущее, например большой XML генерирую или CSV. через поток с отключенным буфером не делают что-ли? какие подводные камни могут быть, если не создать реальный файл? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 15:16 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
barrabas, Тут не подскажу. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 15:32 |
|
Download динамическиформируемого большого файла без буферизации
|
|||
---|---|---|---|
#18+
barrabasкакие подводные камни могут быть, если не создать реальный файл? проблема может быть с клиентом, неторопливо получающим результат ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 16:28 |
|
|
start [/forum/topic.php?fid=18&msg=39784492&tid=1355030]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
137ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 248ms |
0 / 0 |