Работа с большими файлами в классическом ASP - PullRequest
2 голосов
/ 29 мая 2009

Мне было интересно, как лучше всего обслуживать сгенерированный большой файл в классическом asp.

У нас есть приложение с функцией «экспортировать в Excel», которое выдает файлы размером 10 МБ. Выделения создаются простым вызовом страницы .asp, для которой Response.ContentType установлен в Excel и имеет HTML-таблицу для данных.

Это приводит к тому, что пользователю требуется 4 минуты, прежде чем появится диалоговое окно «Сохранить как ...».

Мое текущее решение - вызвать страницу .asp, которая создает Excel на сервере с AJAX и позволяет странице возвращать URL сгенерированного документа. Затем я могу использовать JavaScript для отображения на исходной странице.

Легко ли это сделать с помощью классического asp (создание файлов на сервере с каким-то потоком) при сохранении безопасности? (URL должен позволить людям угадывать расположение других файлов)

Как мне поступить с обработкой удаленных сгенерированных файлов сверхурочно? Они должны периодически удаляться при изменении данных в реальном времени.

Спасибо.

edit: Теперь я понял, что создание файла на сервере, вероятно, также займет 4 минуты ...

Ответы [ 3 ]

2 голосов
/ 29 мая 2009

Я думаю, что вы выбираете сложный маршрут, когда решение достаточно простое (хотя я могу пропустить некоторые требования)

Если вы хотите создать Excel, просто вызовите страницу asp, которая делает следующее:

Response.clear
Response.AddHeader "content-disposition", "attachment; filename=myexcel.xls"
Response.ContentType = "application/excel"

'//write the content of the file
Response.write "...."

Response.end

Это запустит процесс загрузки в браузере без необходимости создания дополнительного вызова, JavaScript или чего-либо еще

См. этот вопрос для получения дополнительной информации о формате, который вы выберете для создания Excel.

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

Поскольку Томас обновляет вопрос, и реальная проблема заключается в том, что создание файла занимает 4 минуты, решение может быть следующим:

  1. Предложите пользователю отправить файл по электронной почте (если это работоспособное решение на вашем сервере или хостинге).

  2. Создайте файл асинхронно и сообщите пользователю, когда будет завершена генерация файла (с помощью вызова ajax, как SO, когда другой пользователь добавил ответ)

Для генерации файла на сервере

'//You should change for a random name or something that makes sense
FileName = "C:\temp\myexcel.xls" 
FileNumber = FreeFile
Open FileName For Append As #FileNumber

'//generate the content
TheRow = "...."
Print #FileNumber, TheRow




Close #FileNumber

Для удаления сгенерированных временных файлов
Я использую Empty Temp Folders бесплатное приложение, которое я ежедневно запускаю на сервере, чтобы заботиться о сгенерированных временных файлах. (Опять же, это зависит от вашего сервера или хостинга)

О безопасности
Создайте файлы, используя случайные числа или GUI для легкой защиты. Если данные конфиденциальны, вам нужно будет загрузить файл со страницы ASP, но я думаю, что вы снова столкнетесь с той же проблемой ... (4 минуты для загрузки)

0 голосов
/ 02 июня 2009
  1. Чтение файла с использованием FSO.
  2. Установить заголовки для типа файла Excel, имя в соответствии с прочитанным файлом и для загрузки (вложение)
  3. Сбросить ответ после установки заголовков. Клиент должен отобразить диалог «сохранить как».
  4. Вывод FSO на ответ. Клиент загрузит файл и увидит индикатор выполнения.
0 голосов
/ 29 мая 2009

Как вы планируете генерировать Excel? Я надеюсь, что вы не планируете вызывать Excel для этого, так как он не поддерживается и, как правило, не будет работать хорошо.

Вы должны проверить, есть ли COM-компоненты для генерации Excel, которые вы можете вызывать из Classic ASP. Также можно добавить одну страницу ASP.NET для этой цели. Я точно знаю, что есть компоненты, которые можно вызывать со страниц ASP.NET для этого. Хуже всего то, что существует экспортный компонент Excel от Infragistics, который работает со своим элементом управления UltraWebGrid для экспорта. Сетка не должна быть видимой для этого, но стили в сетке преобразуются в стили в электронной таблице. Они также позволяют вам манипулировать электронной таблицей программно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...