使用文件上载工具ASP.Net发出问题

时间:2013-08-14 03:49:05

标签: c# asp.net file-upload

我以非常简单的方式使用文件上传工具。需要获取文件(非常小的大约20-25 KB)并将其传输到远程服务器。

每个服务器都可以访问特定的用户名和密码,因为我必须在使用File.SaveAs()函数之前使用Impersonation。

public void btnUploadFile_Click(Object sender, EventArgs e)
    {        
                    try
                    {
                        string strUploadDir = GetFileUploadLocation(ddlRole.SelectedItem.Value, fuupload.FileName);
                            objCommon.ImpersonateUser("xxxxxx","xxx", "xxx");
                            fuupload.SaveAs(strUploadDir + "\\" + fuupload.FileName);
                            objCommon.EndImpersonation();
                            divUploadMessage.InnerHtml = "<font color='green'><b>File uploaded successfully.</b></font><br>";
                    }
                    catch (Exception ex)
                    {
                        divUploadMessage.InnerHtml = "<font color='red'><b>Failed to upload. Please try again. Error : " + ex.ToString() + "</b></font><br>";
                    }                
    }

现在,我遇到的问题:

  1. 在我上传文件的一台服务器中,文件大小减少到零,所以基本上它变成了一个空文件
  2. 当我使用此服务时,从其他服务器,我收到一个未知的用户名或密码错误,而我已检查用户凭据,这是正常的。此外,IIS设置设置为用户Windows身份验证。
  3. 对于使用的模拟,下面是代码。

    public bool ImpersonateUser(String userName, String domain, String password)
        {
            WindowsIdentity objIdentity;
            IntPtr token = IntPtr.Zero;
            IntPtr tokenDuplicate = IntPtr.Zero;
    
            if (RevertToSelf())
            {
                if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
                {
                    if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
                    {
                        objIdentity = new WindowsIdentity(tokenDuplicate);
                        impersonationContext = objIdentity.Impersonate();
                        if (impersonationContext != null)
                        {
                            CloseHandle(token);
                            CloseHandle(tokenDuplicate);
                            return true;
                        }
                    }
                }
            }
            if (token != IntPtr.Zero)
                CloseHandle(token);
            if (tokenDuplicate != IntPtr.Zero)
                CloseHandle(tokenDuplicate);
            return false;
        }
    

0 个答案:

没有答案