如何在c#中将文件上传到网络

时间:2015-01-19 16:00:16

标签: c# file-upload server

我需要用c#动态上传文件。我可以用asp.net做到这一点,但O无法用桌面应用程序做到这一点。

我正在使用打开文件对话框上传文件。这是我的代码

string path = "";
        OpenFileDialog fDialog = new OpenFileDialog();
        fDialog.Title = "Attach PMI document";
        fDialog.Filter = "PDF docs|*.pdf|JPG Files|*.jpg|JPEG Files|*.jpeg";
        fDialog.InitialDirectory = @"Desktop";
        if (fDialog.ShowDialog() == DialogResult.OK)
        {

            fileName = System.IO.Path.GetFileName(fDialog.FileName);
            path = Path.GetDirectoryName(fDialog.FileName);
            textBox1.Text = path + "\\" + fileName;


        }

打开文件对话框没问题。

当我尝试使用此代码保存到我的计算机时,它是成功的

       AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsIdentity idnt = new WindowsIdentity(username, password);
WindowsImpersonationContext context = idnt.Impersonate();
File.Copy(@"\\192.100.0.2\temp", @"D:\WorkDir\TempDir\test.txt", true);
context.Undo();

但是当我尝试将文件复制到网络时,它会出现“错误,提供的用户名未正确形成帐户名称”

我该如何复制呢? 感谢。

2 个答案:

答案 0 :(得分:0)

您是否需要网络凭据(用户名,密码)才能访问该特定服务器?如果是这样,您可能希望查看设置主要策略,例如:

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsIdentity idnt = new WindowsIdentity(username, negotiation_type);
WindowsImpersonationContext context = idnt.Impersonate();
File.Copy(@"\\192.100.0.2\temp", @"D:\WorkDir\TempDir\test.txt", true);
context.Undo();

请注意,您必须提供有效的用户名(有关详细信息,请参阅this MSDN参考)。用户名必须采用UPN格式(用户主体名称,格式为电子邮件格式),通常表示为:john_doe@example.com 它将需要互联网域名。

您提供的协商类型将用于处理身份验证(AD)。可以找到更多信息here

修改
如果此方法没有帮助(例如,当您的服务器未连接到您的域时)并且不适合您,则可能需要考虑使用FTP客户端。 File.Copy不支持URI格式的字符串,因此this SO Question可能也有帮助。

答案 1 :(得分:0)

问题与服务器权限有关。因此我的问题在获得许可后得以解决。