您如何允许在内部 Windows 身份验证 Intranet 上上传多个文件?
Posted
技术标签:
【中文标题】您如何允许在内部 Windows 身份验证 Intranet 上上传多个文件?【英文标题】:How do you allow multiple file uploads on an internal windows-authentication intranet? 【发布时间】:2010-09-08 04:43:34 【问题描述】:我有几个解决方案,但没有一个是完美的。
平台
-
ASP.NET / VB.NET / .NET 2.0
IIS 6
IE6(主要),部分 IE7; Firefox 不是必需的,但很有用
允许的第 3 方选项
-
闪光
ActiveX(希望避免)
Java(希望避免)
目前的尝试
Gmail 样式:您可以使用 javascript 添加新的上传元素(输入类型='file'),然后单击按钮一次性上传所有元素。这可行,但仍需要大量点击。 (我能够使用不可见的 ActiveX 控件来检测文件大小等内容,这将很有用。)
Flash Uploader:我发现了几个 Flash Upload 控件,它们使用 1x1 Flash 文件作为上传器,可由 javascript 调用。 (一个这样的控件是FancyUpload,另一个是Dojo's Multiple File Uploader,另一个是darick_c at CodeProject。)这些让我很兴奋,但我很快遇到了两个问题:
-
Flash 10 将破坏用于调用多文件上传对话框的功能。解决方法是使用透明的闪光框架,或者只是使用闪光按钮来调用对话框。这不是什么大不了的事。
当 Flash 文件尝试上传文件时,我们的 Intranet 上使用的集成 Windows 身份验证未使用,提示用户输入凭据。解决方法是使用无 cookie 会话,由于其他几个原因,这对我们的项目来说将是一场噩梦。
Java 上传器:我注意到有几个基于 Java 的多文件上传器,但大多数似乎都需要花钱。如果我发现一个非常好用的,我可以安排购买它。我宁愿不要。我也不喜欢他们中的大多数人的样子。我喜欢 FancyUpload,因为它与 html/javascript 交互,因此我可以轻松地以任何我想要的方式设置和管理它。
ActiveX 上传器:我也找到了an ActiveX solution。 ActiveX 似乎可以工作。我会自己写而不是买那个。我想这将是我最后的手段。
分辨率
我希望能够使用 FancyUpload 之类的东西。如果我能以某种方式获得凭据提示,那将是完美的。但是,根据我的研究,似乎唯一真正的解决方法是无 cookie 会话,这是我做不到的。
所以,问题是:有没有办法解决上面提出的问题,或者有没有我没有列出的不同解决方案可以实现相同的目标?
【问题讨论】:
【参考方案1】:我认为集成 Windows 身份验证没有任何解决方法。您可以做的是将文件保存到一个通用的不受保护的文件夹中,并在 swfupload 的情况下,使用处理程序在文件完全上传时移动文件
【讨论】:
【参考方案2】:您也可以尝试SWFUpload - 它适合您的 Flash Uploader“类别”。
【讨论】:
很好,但我相当肯定它与其他闪存解决方案存在相同的缺陷。如果没有,请告诉我。【参考方案3】:我们公司使用支持此功能的 ajaxuploader.com。
【讨论】:
【参考方案4】:在 Internet Explorer 中,FileReference.upload(闪存上传)也会同时发送 cookie。
这种行为只有在其他浏览器中运行时才会中断。
【讨论】:
我想我读到了,但是当我尝试它时,IE 会提示我输入凭据。【参考方案5】:@davidinbcn.myopenid.co: 我基本上就是这样解决这个问题的。但是,为了提供更详细的答案,我在这里发布了我的解决方案。
解决方案!
创建两个 Web 应用程序或网站,或其他任何东西。
应用程序 A 是一个简单的网络应用程序。此应用程序的目的是接收文件上传并将它们保存到适当的位置。将此设置为允许匿名访问。然后制作一个 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 页面。
【讨论】:
以上是关于您如何允许在内部 Windows 身份验证 Intranet 上上传多个文件?的主要内容,如果未能解决你的问题,请参考以下文章
创建 WCF 休息服务以接受 SAML 并对 Windows 用户进行身份验证