Как загрузить файл размером 100 МБ? - PullRequest
4 голосов
/ 28 апреля 2011

Я занимаюсь разработкой приложения для файлового сервера в ASP.NET. Я должен загрузить файл размером 100 МБ, а затем сохранить его в базе данных SQL Server 2008 в varbinary(max). Сохранение файла в БД обязательно. Я использую FileUpload контроль. Подскажите пожалуйста как обработать такой большой файл?
ОБНОВЛЕНИЕ
Любой пример кода будет очень полезен, любой пример кода?
Как читать файл кусками?

Ответы [ 6 ]

9 голосов
/ 28 апреля 2011

Вы можете изменить ограничение по умолчанию (4 МБ) для каталога и его дочерних элементов, поместив специальный файл web.config в этот каталог.Таким образом, вам не нужно заставлять весь сайт разрешать огромные загрузки (это может привести к определенным атакам).

Вот пример из производственного приложения.Этот параметр установлен на 200 МБ:

<?xml version="1.0"?>
<!-- Nested this web.config here to allow for huge uploads (up to 200mb)  -->

<configuration>
    <system.web>
      <httpRuntime maxRequestLength="200000"/>
    </system.web>
</configuration>

Вложение web.configs не имеет негативных побочных эффектов - ваши существующие настройки web.config будут по-прежнему работать по всему сайту, и из этого каталога и далее,эти настройки httpRuntime будут унаследованы.

На странице, которая обрабатывает загрузку, убедитесь, что у вас ScriptTimeout выше, чем обычно.Это измеряется в секундах:

Server.ScriptTimeout = 1200;

Мне нравится устанавливать это на странице, а не на web.config, потому что он изолирует увеличенное время ожидания только до этой одной страницы.

На стороне SQL столбцы varbinary могут иметь размер до 2 гигабайт, так что вы можете пойти туда.

Обновление: Я использовал этот подход с 50+ мегабайт файлов, но возможно, что в точке 100 мегапикселей стандартные методы могут выйти из строя.Доступно множество сторонних элементов управления, которые могли бы взять на себя оттуда, но я бы, вероятно, внимательно посмотрел на RadUpload Telerik, так как они качественные и выглядят очень отточенными:* Что касается вашего обновления относительно чтения файла кусками, если вы действительно хотите написать это самостоятельно, Бобби Д. указал на эту статью: Загрузка больших файлов с использованием HttpModule

3 голосов
/ 28 апреля 2011

ASP.NET имеет ограничение по умолчанию 4 МБ для загрузки файлов. Эта статья описывает, как изменить это значение по умолчанию и обсуждает некоторые проблемы с загрузкой больших файлов.

3 голосов
/ 28 апреля 2011

Попробуйте: Загрузка больших файлов в ASP.NET .

Дайте мне знать, если это поможет.

2 голосов
/ 28 апреля 2011

Несколько лет назад (в ASP 1.1?) Я использовал этот элемент управления, и это было здорово.

См. http://krystalware.com/Products/SlickUpload/

http://krystalware.com/Products/SlickUpload/Documentation/concepts/uploading-sql-server.aspx

1 голос
/ 28 апреля 2011

Разбейте его на части, присвойте порядковый номер каждой детали, после получения файла на стороне сервера (при условии, что БД есть), соберите, отсортируйте детали по порядковому номеру и соедините их, удалив порядковые номера. , Надеюсь, вы не получите тайм-аут, если это единственная проблема! Возможно, вы могли бы использовать свой TPL для загрузки нескольких частей и присоединиться к ним одинаково!

1 голос
/ 28 апреля 2011

Поскольку вы используете SQL Server 2008 с максимальным объемом 2 ГБ для столбцов varbinary, все будет в порядке. Любой обычный скрипт загрузки, вероятно, будет работать. Однако, когда вы начинаете загружать файлы такого размера, базовые соединения HTTP или TCP / IP могут стать проблемой, но в действительности вы ничего не можете с этим поделать.

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