目前我有一个应用程序从我的Web应用程序接收上传的文件。我现在需要将该文件传输到恰好位于同一网络上的文件服务器(但情况可能并非如此)。
我试图在C#.NET中使用webclient类。
string filePath = "C:\\test\\564.flv";
try
{
WebClient client = new WebClient();
NetworkCredential nc = new NetworkCredential(uName, password);
Uri addy = new Uri("\\\\192.168.1.28\\Files\\test.flv");
client.Credentials = nc;
byte[] arrReturn = client.UploadFile(addy, filePath);
Console.WriteLine(arrReturn.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
位于192.168.1.28的计算机是文件服务器,共享c:\ Files。 截至目前,我收到登录失败的错误用户名或密码错误,但我可以打开资源管理器并输入该路径成功登录。我也可以使用远程桌面登录,因此我知道用户帐户有效。
有关此错误的任何想法? 是否可以像这样直接传输文件?使用webclient类还是其他类?
答案 0 :(得分:16)
只需使用
File.Copy(filepath, "\\\\192.168.1.28\\Files");
通过UNC路径公开的Windows文件共享被视为文件系统的一部分,与网络无关。
使用的凭据将是ASP.NET辅助进程的凭据,或者您启用的任何模拟。如果您可以调整那些以使其正确,可以这样做。
您可能会遇到问题,因为您使用的是IP地址而不是服务器名称(Windows信任设置会阻止离开域 - 使用IP隐藏任何域详细信息)。 如果可能,请使用服务器名称!
如果这不在同一个Windows域中,并且您尝试使用其他域帐户,则需要将用户名指定为“[domain_or_machine] \ [username]”
如果您需要指定显式凭据,则需要查看coding an impersonation solution。
答案 1 :(得分:4)
namespace FileUpload
{
public partial class Form1 : Form
{
string fileName = "";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string path = "";
OpenFileDialog fDialog = new OpenFileDialog();
fDialog.Title = "Attach customer proposal document";
fDialog.Filter = "Doc Files|*.doc|Docx File|*.docx|PDF doc|*.pdf";
fDialog.InitialDirectory = @"C:\";
if (fDialog.ShowDialog() == DialogResult.OK)
{
fileName = System.IO.Path.GetFileName(fDialog.FileName);
path = Path.GetDirectoryName(fDialog.FileName);
textBox1.Text = path + "\\" + fileName;
}
}
private void button2_Click(object sender, EventArgs e)
{
try
{
WebClient client = new WebClient();
NetworkCredential nc = new NetworkCredential("erandika1986", "123");
Uri addy = new Uri(@"\\192.168.2.4\UploadDocs\"+fileName);
client.Credentials = nc;
byte[] arrReturn = client.UploadFile(addy, textBox1.Text);
MessageBox.Show(arrReturn.ToString());
}
catch (Exception ex1)
{
MessageBox.Show(ex1.Message);
}
}
}
}
答案 2 :(得分:0)
当您手动打开IP地址(通过RUN命令或映射网络驱动器)时,您的PC将通过管道发送您的凭据,文件服务器将从DC获得授权。
当ASP.Net尝试时,它将尝试使用IIS工作者用户(除非启用模拟,这将列出一些其他问题)。传统上,IIS工作者用户无权跨服务器(甚至Web服务器上的其他文件夹)工作。