Member 13574710 Ответов: 1

Asp.net загрузка нескольких файлов


Привет

Я загружаю несколько файлов из ASP.Чистая веб-форма. у нас есть одна страница с несколькими панелями

из панели 2 я прикрепляю 5 файлов, а из панели 5 отправляю страницу

я сохраняю информацию о файле в сеансах и назначаю FileUpload в Ispostback

ObjFileUploader1 = (FileUpload)Сессия["FileUpload1"];
ObjFileUploader2 = (FileUpload)Сессия["FileUpload2"];
ObjFileUploader3 = (FileUpload)Сессия["FileUpload3"];
ObjFileUploader4 = (FileUpload)Сессия["FileUpload4"];
ObjFileUploader5 = (FileUpload)Сессия["FileUpload5"];

на кнопке отправки я хочу выполнить итерацию через ObjFileUploader1 , ObjFileUploader2 , ObjFileUploader3,ObjFileUploader4,ObjFileUploader5

для сохранения в БД и сервере

запрос.файлы не работают из-за того, что я нахожусь в панели 5

В настоящее время я делаю , как показано ниже, повторяющийся код

если (темп != 0 &&усилителя; ObjFileUploader1 != нуль &амп;&амп; ObjFileUploader1.HasFile)
{
Сохраните БД и загрузите файл
}

если (темп != 0 &&усилителя; ObjFileUploader2 != нуль &амп;&амп; ObjFileUploader2.HasFile)
{
Сохраните БД и загрузите файл
}

если (темп != 0 &&усилителя; ObjFileUploader3 != нуль &амп;&амп; ObjFileUploader3.HasFile)
{
Сохраните БД и загрузите файл
}

Пожалуйста, помогите мне

Что я уже пробовал:

Запрос.сбор файлов не работает
Запрос.файлы

Laiju k

какую ошибку вы получаете?

Ziee-M

Почему бы вам не создать свой собственный список в качестве глобальной переменной на странице и не использовать его ?
Вы можете сохранить список в виде состояния просмотра вместо сеансов.
Сеансы-это зло, кстати, есть бесчисленные статьи на эту тему.

Richard Deeming

"Глобальные переменные" обычно относятся к статическим/общим полям, которые являются абсолютным злом в веб-приложении. Существует только одно общее значение между ними. все запросы от все пользователи, поэтому вы в конечном итоге сохраняете данные одного пользователя в записях другого пользователя.

Хранение значений в ViewState также не является хорошей идеей. Даже если они будут сериализованы, вы закончите тем, что пользователь загрузит файлы; ваш код отправит содержимое файлов обратно пользователю в ViewState; пользователь отправит содержимое файлов обратно на сервер в ViewState; сервер отправит содержимое файлов обратно пользователю в ViewState и т. д.

Сеанс-это лучший выбор, и, конечно же, он не является "злым". Но вы все равно столкнетесь с проблемами, пытаясь сохранить большие объемы данных в памяти сервера. Вероятно, было бы лучше сохранить файлы во временном месте, используя случайно сгенерированные имена; сохранить имена в сеансе; и иметь код в системе. Session_End событие для удаления всех файлов, которые не были обработаны.

Richard Deeming

NB: Если вы используете .NET 4.5 или более позднюю версию, вы можете установить Свойство allowmultiple[^] свойство на одном FileUpload управление, позволяющее пользователю загружать несколько файлов, а не использовать несколько FileUpload управления.

Поддержка браузеров[^] довольно разумно.

1 Ответов

Рейтинг:
1

F-ES Sitecore

Я не совсем понимаю этот вопрос, но я думаю, что вы хотите зациклиться на своих элементах управления загрузкой. Поместите их в заполнитель

<asp:PlaceHolder ID="placeUplode" runat="server">
    <asp:FileUpload ID="ObjFileUploader1" runat="server" />
    <asp:FileUpload ID="ObjFileUploader2" runat="server" />
    <asp:FileUpload ID="ObjFileUploader3" runat="server" />
    <asp:FileUpload ID="ObjFileUploader4" runat="server" />
    <asp:FileUpload ID="ObjFileUploader5" runat="server" />
</asp:PlaceHolder>


затем в вашем коде получите доступ к ним следующим образом

foreach(FileUpload uploader in placeUplode.Controls.OfType<FileUpload>())
{
    System.Diagnostics.Debug.WriteLine(uploader.ID);
    if (uploader.HasFile)
    {
        // your code here
    }
}