Как разрешить загрузку нескольких файлов во внутренней интрасети с проверкой подлинности Windows?
-
09-06-2019 - |
Вопрос
У меня есть пара решений, но ни одно из них не работает идеально.
Платформа
- ASP.NET / VB.NET / .NET 2.0
- IIS 6
- IE6 (в первую очередь), с некоторым количеством IE7;Firefox не нужен, но полезен
Разрешенные сторонние Опции
- Вспышка
- ActiveX (хотелось бы избежать)
- Java (хотелось бы избежать)
Текущие Попытки
Стиль Gmail:Вы можете использовать javascript для добавления новых загружаемых элементов (тип ввода= 'file'), а затем загрузить их все сразу одним нажатием кнопки.Это работает, но по-прежнему требует большого количества кликов.(Я смог использовать невидимый элемент управления ActiveX для определения таких параметров, как размер файла, что было бы полезно.)
Загрузчик Flash-файлов:Я обнаружил пару элементов управления загрузкой Flash, которые используют flash-файл размером 1x1 в качестве средства загрузки, вызываемого javascript.(Одним из таких элементов управления является Модная загрузка, другой - это Устройство для загрузки нескольких файлов Dojo, еще один - это один по darick_c в CodeProject.) Это взволновало меня, но я быстро столкнулся с двумя проблемами:
- Flash 10 нарушит функциональность, которая используется для вызова диалогового окна загрузки нескольких файлов.Обходной путь заключается в использовании прозрачной рамки flash или просто использовании кнопки flash для вызова диалогового окна.В этом нет ничего особенного.
- Встроенная проверка подлинности Windows, используемая в нашей интрасети, не используется, когда Flash-файл пытается загрузить файлы, запрашивая у пользователя учетные данные.Обходным решением для этого является использование сеансов без использования cookies, что стало бы кошмаром для нашего проекта по нескольким другим причинам.
Загрузчик Java:Я заметил несколько загрузчиков нескольких файлов на базе Java, но большинство из них, похоже, стоят денег.Если бы я нашел тот, который работал действительно хорошо, я мог бы договориться о его покупке.Я бы просто предпочел этого не делать.Мне также не нравится, как выглядят большинство из них.Мне понравился FancyUpload, потому что он взаимодействовал с html / javascript, так что я мог легко стилизовать его и управлять им любым способом, который я хочу.
Загрузчик ActiveX:Я нашел решение ActiveX также хорошо.Похоже, что ActiveX будет работать.Я бы просто написал свой собственный, вместо того чтобы покупать этот.Я думаю, это будет моим последним средством.
Разрешение
Я бы с удовольствием мог использовать что-то вроде FancyUpload.Если бы я мог просто каким-то образом воспользоваться запросом учетных данных, это было бы идеально.Но, судя по моим исследованиям, единственное реальное решение проблемы - это сеансы без приготовления, чего я просто не могу сделать.
Итак, вопрос в том,:Есть ли способ решить проблемы, представленные выше, ИЛИ есть другое решение, которое я не перечислил, которое достигает той же цели?
Решение 5
@davidinbcn.myopenid.co:Вот, по сути, как я решил эту проблему.Но, стремясь дать более подробный ответ, я публикую свое решение здесь.
Решение!
Создайте два веб-приложения, или веб-сайт, или что-то еще.
Приложение А это простое веб-приложение.Цель этого приложения - получать загруженные файлы и сохранять их в нужном месте.Настройте это как разрешенный анонимный доступ.Затем создайте единую ASPX-страницу, которая принимает размещенные файлы и сохраняет их в заданном месте.(Я делаю это в интрасети.Делая это, интернет-сайты могут столкнуться с проблемами безопасности.Примите дополнительные меры предосторожности, если это так.) Код этой страницы будет выглядеть примерно так:
Dim uploads As HttpFileCollection = HttpContext.Current.Request.Files
If uploads.Count > 0 Then
UploadFiles(uploads)
Else
result = "error"
err = "File Not Uploaded"
End If
Приложение В это ваш основной сайт, на котором будет разрешена загрузка файлов.Настройте это как аутентифицированное веб-приложение, которое не допускает анонимный доступ.Затем поместите Модная загрузка (или аналогичное решение) на странице этого сайта.Настройте его для публикации своих файлов на странице загрузки ASPX приложения A.
Другие советы
Я не думаю, что есть какие-либо обходные пути для интегрированной проверки подлинности Windows.Что вы могли бы сделать, так это сохранить файлы в общую незащищенную папку и, в случае swfupload, использовать обработчик для перемещения файла после его полной загрузки
Ты мог бы попробовать SWFUpload Загрузить также - это вписалось бы в вашу "категорию" загрузчика Flash.
Наша компания использует ajaxuploader.com, которые поддерживают эту функцию.
В Internet Explorer, FileReference.upload (флэш-загрузка) будет отправляйте также файлы cookie.
Это поведение нарушается только при запуске в других браузерах.