ASP.NET загруженный файл - PullRequest
1 голос
/ 21 июля 2009

У меня есть веб-приложение ASP.NET, которое использует jQuery на стороне клиента. В одной из веб-форм у меня есть куча элементов управления для заполнения и элемент управления загрузкой. Пользователь может запустить загрузку при заполнении других записей в форме. Когда пользователь сохраняет форму, все данные, включая файл, сохраняются в базе данных. Вопрос в том, что делать с загруженным файлом, пока пользователь заполняет форму? У меня есть два возможных решения, но я не знаю, какое из них более оптимально

  1. Кэшируйте загруженный файл, а затем при сохранении извлекайте его и сохраняйте в базу данных со всеми другими данными.
  2. Сохраните файл во временную папку, а затем прочитайте его.

Каково лучшее решение для этого? Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 21 июля 2009

Я думаю, что наиболее подходящим решением будет сохранение загруженного файла в кеше. Вот код

    var fileKey = Guid.NewGuid();
    var fileStream = new Byte[Request.Files[0].ContentLength];
    Request.Files[0].InputStream.Read(fileStream, 0, Request.Files[0].ContentLength);
    Cache[fileKey.ToString()] = fileStream;

GUID fileKey можно сохранить в ViewState или отправить как ответ клиенту. Позже, когда вся форма будет сохранена, кэшированный файл может быть извлечен и сохранен в базе данных с другими данными. Хорошая вещь об этом методе состоит в том, что, если пользователь перейдет от страницы, кэшированный файл истечет, таким образом избегая затопления ресурса Мы можем установить время истечения, используя

Cache.Add(fileKey, fileStream, null, DateTime.UtcNow.AddMinutes(10), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);

функция.

1 голос
/ 21 июля 2009

Как насчет:

3: сохранить его в базе данных, но пометить как в неполном состоянии

Это может быть отдельная таблица или та же таблица со столбцом состояния.

0 голосов
/ 24 июля 2009

Как и другие упомянутые люди - вы можете просто загрузить его. Вы можете сделать это разными способами:

  1. Загрузите файлы во временную папку, и когда они, наконец, скажут, сохранить или завершить - вы можете переместить файл из этой временной папки в другую папку, где обычно хранятся обычные файлы.
  2. Еще одна вещь, которую вы можете сделать, когда пользователь нажимает кнопку загрузки временных файлов, - это то, что вы можете проверить свою временную папку и очистить другие файлы, которые оставались там более 1-2 дней / недель, таким образом Вы точно знаете, что не теряете пространство.

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

0 голосов
/ 21 июля 2009

Я не вижу разницы между двумя вариантами: что вы подразумеваете под кэшированием файла? Разве это не то же самое, что сохранение во временную папку?

AFAIK, большинство сайтов не начнут загружать, пока не заполнится вся форма (что если ваш пользователь отменит или откажется?). Затем они отображают промежуточный индикатор выполнения («пожалуйста, подождите, пока мы анализируем ваши данные ...»).

Как общее правило проектирования, получение частичных данных в любой момент времени может привести к непоследовательным данным позже. Если вы должны сделать это поэтапно, измените свою форму на мастера.

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