Как вы разрешаете загрузку нескольких файлов во внутренней интрасети Windows-аутентификации?

У меня есть пара решений, но ни одно из них не работает идеально.

Платформа

  1. ASP.NET / VB.NET /.NET 2.0
  2. IIS 6
  3. IE6 (в основном), с некоторыми IE7; Firefox не нужен, но полезен

Разрешенные сторонние параметры

  1. вспышка
  2. ActiveX (хотел бы избежать)
  3. Java (хотел бы избежать)

Текущие попытки

Стиль Gmail: Вы можете использовать javascript для добавления новых элементов загрузки (тип ввода = "файл"), а затем загрузить их все сразу, одним нажатием кнопки. Это работает, но все еще требует много кликов. (Я смог использовать невидимый элемент управления ActiveX для обнаружения таких вещей, как размер файла, что было бы полезно.)

Flash Uploader: я обнаружил пару элементов управления Flash Upload, которые используют флэш-файл 1x1 для работы в качестве загрузчика, который можно вызвать с помощью javascript. (Одним из таких элементов управления является FancyUpload, другим - Dojo Multiple File Uploader, а еще один - darick_c в CodeProject.) Это меня взволновало, но я быстро столкнулся с двумя проблемами:

  1. Flash 10 нарушит функциональность, которая используется для вызова диалогового окна загрузки нескольких файлов. Обходной путь должен использовать прозрачную рамку вспышки, или просто использовать кнопку вспышки, чтобы вызвать диалоговое окно. Это не огромная сделка.
  2. Встроенная проверка подлинности Windows, используемая в нашей интрасети, не используется, когда файл Flash пытается загрузить файлы, запрашивая у пользователя учетные данные. Обходной путь для этого состоит в том, чтобы использовать сеансы без файлов cookie, что было бы кошмаром для нашего проекта по ряду других причин.

Java Uploader: я заметил несколько многофайловых загрузчиков на основе Java, но большинство из них стоят денег. Если бы я нашел тот, который работал действительно хорошо, я мог бы договориться о его покупке. Я бы просто не хотел. Мне также не нравится внешний вид большинства из них. Мне понравился FancyUpload, потому что он взаимодействовал с html/javascript, так что я мог легко стилизовать и управлять им любым удобным для меня способом.

ActiveX Uploader: я также нашел решение ActiveX. Похоже, что ActiveX будет работать. Я бы просто написал свой вместо того, чтобы покупать тот. Это будет мое последнее средство, я думаю.

разрешение

Я хотел бы иметь возможность использовать что-то вроде FancyUpload. Если бы я мог просто получить запрос на ввод учетных данных, это было бы прекрасно. Но из моего исследования выясняется, что единственный реальный обходной путь - сеансы без печенья, чего я просто не могу сделать.

Итак, вопрос заключается в следующем: есть ли способ решения проблем, представленных выше, ИЛИ есть ли другое решение, которое я не перечислил, для достижения той же цели?

5 ответов

Решение

@ davidinbcn.myopenid.co: Вот как я решил эту проблему. Но, чтобы дать более подробный ответ, я публикую здесь свое решение.

Решение!

Создайте два веб-приложения, или веб-сайты, или что угодно.

Приложение A - это простое веб-приложение. Цель этого приложения - получать загружаемые файлы и сохранять их в нужном месте. Установите это как разрешенный анонимный доступ. Затем создайте одну страницу 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

Приложение B - это ваш основной сайт, который позволяет загружать файлы. Установите это как аутентифицированное веб-приложение, которое не разрешает анонимный доступ. Затем разместите FancyUpload (или аналогичное решение) на странице этого сайта. Сконфигурируйте его для публикации своих файлов на странице ASPX приложения А.

Я не думаю, что есть какая-то работа вокруг встроенной аутентификации Windows. Что вы могли бы сделать, это сохранить файлы в общую незащищенную папку и, в случае swfupload, использовать обработчик для перемещения файла, когда он полностью загружен

Наша компания использует ajaxuploader.com, которые поддерживают эту функцию.

Вы также можете попробовать SWFUpload - он будет соответствовать вашей категории Flash Uploader.

В Internet Explorer FileReference.upload (флэш-загрузка) также будет отправлять файлы cookie.

Такое поведение нарушается только при работе в других браузерах.

Другие вопросы по тегам