Как разрешить загрузку нескольких файлов во внутреннюю интрасеть с проверкой подлинности Windows?

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

Платформа

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

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

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

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

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

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

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

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

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

Разрешение

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

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


person Community    schedule 08.09.2008    source источник


Ответы (5)


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

person user10479    schedule 16.09.2008

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

person Bermo    schedule 08.09.2008
comment
Хорошо, но я совершенно уверен, что у него есть те же подводные камни, что и у других флеш-решений. Если нет, то, пожалуйста, дайте мне знать. - person EndangeredMassa; 09.09.2008

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

person Community    schedule 08.01.2009

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

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

person anirudhsasikumar    schedule 16.09.2008
comment
Кажется, я читал это, но IE запрашивает у меня учетные данные, когда я пытаюсь это сделать. - person EndangeredMassa; 16.09.2008

@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 приложения A.

person EndangeredMassa    schedule 27.10.2008