为以访客身份登录的用户从服务器下载文件

Posted

技术标签:

【中文标题】为以访客身份登录的用户从服务器下载文件【英文标题】:Downloading file from server for user logged in as guest 【发布时间】:2010-02-05 15:58:43 【问题描述】:

我有一个代码,可让您将任何文件从服务器下载到本地主机。

当我以管理员身份登录时,此代码工作正常,但当我以访客用户身份登录时,它不允许我下载..并且我收到一条错误消息说..

外部组件抛出异常。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

 Exception Details: System.Runtime.InteropServices.SEHException: External component has thrown an exception.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

我的代码如下

string filepath = restoredFilename.ToString();

            // Create New instance of FileInfo class to get the properties of the file being downloaded
            FileInfo myfile = new FileInfo(filepath);

            // Checking if file exists
            if (myfile.Exists)
            

                // Clear the content of the response
                Response.ClearContent();

                // Add the file name and attachment, which will force the open/cancel/save dialog box to show, to the header
                Response.AddHeader("Content-Disposition", "attachment; filename=" + myfile.Name);

                //Response.AddHeader("Content-Disposition", "inline; filename=" + myfile.Name);
                // Add the file size into the response header
                Response.AddHeader("Content-Length", myfile.Length.ToString());

                // Set the ContentType
                Response.ContentType = ReturnExtension(myfile.Extension.ToLower());

                //// Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
                Response.TransmitFile(myfile.FullName);

                // End the response
                Response.End();
            

我必须使用访客下载文件..请帮助谢谢

堆栈跟踪:

[SEHException (0x80004005): 外部组件抛出异常。] xyzgui.Guest.DriveContents.RestoreOneFileForGUI(Int32 machineID_Download,Int64 fileID,StringBuilder 恢复文件名,UInt32 恢复文件名Bufsize)+0 xyzgui.Guest.DriveContents.file_Click(Object sender, EventArgs e) 在 C:\Users\jagmit\Documents\Visual Studio 2008\Projects\xyzgui\xyzgui\Guest\DriveContents.aspx.cs:341 System.Web.UI.WebControls.LinkBut​​ton.OnClick(EventArgs e) +111 System.Web.UI.WebControls.LinkBut​​ton.RaisePostBackEvent(字符串 eventArgument)+79 System.Web.UI.WebControls.LinkBut​​ton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 eventArgument)+10 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)+1565

【问题讨论】:

您的错误消息说:有关异常来源和位置的信息可以使用下面的异常堆栈跟踪来识别。 那么,您能否向我们展示“异常堆栈跟踪下面”? 您的虚拟文件夹的 NTFS 权限是否正常? “下面的异常堆栈跟踪”在哪里。 【参考方案1】:

您使用什么身份验证机制:表单还是 Windows?

您是否开启了模拟功能?

我相信您看到的错误通常是在存在安全问题时引发的 - 当您说“当我以管理员身份登录时”时听起来很可能。

方法RestoreOneFileForGUI 是否还有更多我们没有看到的内容 - 因为它看起来像是在 .NET 之外引发安全异常 - 如果它像访客帐户(网站正在运行的帐户)一样简单下)无法访问文件路径,那么您会看到来自FileInfo constructor 的标准SecurityExceptionUnauthorizedException

【讨论】:

以上是关于为以访客身份登录的用户从服务器下载文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 R 登录然后从 aspx 网页下载文件

如何让windows7默认为以管理员身份打开所有程序

微信企业号 获取用户信息

微信企业号 获取用户信息

Http下载文件的登录验证

从登录的社交网络中获取访客姓名