如何在内部Windows身份验证Intranet上允许多个文件上传?

时间:2008-09-08 18:06:46

标签: javascript flash authentication activex file-upload

我有几个解决方案,但没有一个能够完美运行。

平台

  1. ASP.NET / VB.NET / .NET 2.0
  2. IIS 6
  3. IE6(主要是),有一些IE7; Firefox不是必需的,但很有用
  4. 允许第三方选项

    1. 闪存
    2. ActiveX(想避免)
    3. Java(想避免)
    4. 当前尝试

      Gmail样式:您可以使用javascript添加新的上传元素(输入类型='文件'),然后只需点击一下按钮即可立即上传所有内容。这可行,但仍需要大量点击。 (我能够使用不可见的ActiveX控件来检测文件大小等内容,这很有用。)

      Flash Uploader :我发现了一些Flash上​​传控件,它们使用1x1 flash文件作为上传器,可以通过javascript调用。 (一个这样的控制是FancyUpload,另一个是Dojo's Multiple File Uploader,而另一个是darick_c at CodeProject。)这些令我兴奋,但我很快遇到了两个问题:

      1. Flash 10将破坏用于调用多文件上传对话框的功能。解决方法是使用透明闪光框,或只使用闪光按钮调用对话框。这不是什么大不了的事。
      2. 当Flash文件尝试上传文件时,不会使用我们Intranet上使用的集成Windows身份验证,从而提示用户输入凭据。解决方法是使用无cookie会话,由于其他一些原因,这对我们的项目来说是一场噩梦。
      3. Java Uploader :我注意到了几个基于Java的多文件上传器,但大多数都看起来要花钱。如果我找到一个效果很好的,我可以安排购买它。我只是不愿意。我也不喜欢他们中的大多数人的样子。我喜欢FancyUpload,因为它与html / javascript进行了交互,因此我可以轻松地按照我想要的方式设置和管理它。

        ActiveX上传器:我也找到了an ActiveX solution。似乎ActiveX将起作用。我会写自己的,而不是买那个。我认为这将是我的最后手段。

        解决

        我希望能够使用像FancyUpload这样的东西。如果我可以通过某种方式获取凭据提示,那将是完美的。但是,根据我的研究,似乎唯一真正的解决方法是无cookie会话,我不能这样做。

        所以,问题是:有没有办法解决上面提出的问题,还是有一个我没有列出的不同解决方案可以达到同样的目标?

5 个答案:

答案 0 :(得分:2)

我认为集成的Windows身份验证没有任何解决方法。您可以做的是将文件保存到一般的不受保护的文件夹,并且在swfupload的情况下,使用处理程序在完全上载时移动文件

答案 1 :(得分:1)

您也可以尝试SWFUpload - 它适合您的Flash上​​传器“类别”。

答案 2 :(得分:1)

我们公司使用支持此功能的ajaxuploader.com。

答案 3 :(得分:0)

在Internet Explorer中,FileReference.upload(flash上​​传)也会发送Cookie。

只有在其他浏览器中运行时,此行为才会中断。

答案 4 :(得分:0)

@davidinbcn.myopenid.co:这基本上就是我解决这个问题的方法。但是,为了提供更详细的答案,我在这里发布我的解决方案。

解决方案!

创建两个Web应用程序或网站,或其他任何内容。

应用程序A 是一个简单的Web应用程序。此应用程序的目的是接收文件上载并将其保存到适当的位置。将其设置为允许的匿名访问。然后创建一个接受发布文件的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 是您允许上传文件的主要网站。将其设置为不允许匿名访问的经过身份验证的Web应用程序。然后,将FancyUpload(或类似解决方案)放在此网站的页面上。配置它以将其文件发布到应用程序A的上载ASPX页面。