如何在内部Windows身份验证Intranet上上传多个文件?
我有几个解决方案,但没有一个能很好地解决问题。
平台
- ASP.NET/VB.NET/.NET 2.0
- IIS 6
- IE6(主要是)和一些IE7; Firefox不是必需的,但很有用
允许的第三方选项
- 闪光
- ActiveX(希望避免)
- Java(希望避免)
目前的尝试
Gmail样式:我们可以使用javascript添加新的Upload元素(输入type ='file'),然后单击一下按钮一次将其全部上传。这可行,但是仍然需要大量的点击。 (我能够使用一个不可见的ActiveX控件来检测文件大小之类的东西,这将很有用。)
Flash Uploader:我发现了几个Flash Upload控件,这些控件使用1x1 Flash文件充当上传器,可通过javascript调用。 (一个这样的控件是FancyUpload,另一个是Dojo的" Multiple File Uploader",另一个是CodeProject的darick_c的控件。)这些让我很兴奋,但是我很快遇到了两个问题:
- Flash 10将中断用于调用多文件上传对话框的功能。解决方法是使用透明闪光灯框,或者仅使用闪光灯按钮来调用对话框。没什么大不了的。
- 当Flash文件尝试上传文件并提示用户输入凭据时,不会使用我们Intranet上使用的集成Windows身份验证。解决方法是使用无cookie会话,由于其他一些原因,这将是我们项目的噩梦。
Java上载器:我注意到几个基于Java的多文件上载器,但大多数看起来都是花钱的。如果我发现一个效果很好的产品,我可以安排购买。我宁愿不那样。我也不喜欢其中大多数的外观。我喜欢FancyUpload,因为它可以与html / javascript交互,因此我可以轻松地按自己的方式设置样式和管理它。
ActiveX Uploader:我也找到了ActiveX解决方案。看来ActiveX可以使用。我只会写我自己的而不是买那个。我认为,这将是我的最后选择。
解析度
我希望能够使用FancyUpload之类的东西。如果我可以通过某种方式获得凭据提示,那将是完美的。但是,根据我的研究,似乎唯一真正的解决方法是无cookie会话,而我只是做不到。
因此,问题是:有没有办法解决上述问题,或者有没有列出的实现相同目标的其他解决方案?
解决方案
回答
我们也可以尝试将SWFUpload放入Flash Uploader的"类别"中。
回答
在Internet Explorer中,FileReference.upload(闪存上传)也将发送cookie。
仅当在其他浏览器中运行时,此行为才会中断。
回答
我认为集成的Windows身份验证没有任何解决方法。我们可能要做的就是将文件保存到通用的不受保护的文件夹中,如果使用swfupload,请在文件完全上传后使用处理程序移动文件
回答
@ davidinbcn.myopenid.co:基本上这就是我解决此问题的方法。但是,为了提供更详细的答案,我在这里发布了我的解决方案。
解决方案!
创建两个Web应用程序或者网站,或者其他。
应用程序A是一个简单的Web应用程序。此应用程序的目的是接收文件上传并将其保存到正确的位置。将此设置为允许的匿名访问。然后制作一个接受发布文件并将其保存到给定位置的ASPX页面。 (我正在Intranet上进行此操作。Internet站点可能会因此而使自己暴露于安全问题。在这种情况下,请采取额外的预防措施。)此页面后面的代码如下所示:
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页面。
回答
我们公司使用ajaxuploader.com来支持此功能。