我基本上想要将文件从客户端传输到文件存储服务器而无需实际登录到服务器,这样客户端就无法直接访问服务器上的存储位置。只有当我通过Windows登录手动登录存储服务器时才能这样做。我不想这样做。这是一个基于Web的应用程序。
使用下面的链接,我为我的应用程序编写了一个代码。我无法做到正确,请参考链接并帮助我使用它......
Uploading files to file server using webclient class
以下是我的代码: -
protected void Button1_Click(object sender, EventArgs e)
{
filePath = FileUpload1.FileName;
try
{
WebClient client = new WebClient();
NetworkCredential nc = new NetworkCredential(uName, password);
Uri addy = new Uri("\\\\192.168.1.3\\upload\\");
client.Credentials = nc;
byte[] arrReturn = client.UploadFile(addy, filePath);
Console.WriteLine(arrReturn.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
以下行不会执行...
byte[] arrReturn = client.UploadFile(addy, filePath);
这是我得到的错误:
a期间发生异常 WebClient请求
答案 0 :(得分:1)
啊,似乎(并且有充分的理由),FileUpload
只能将文件保存到Web服务器及其驱动器。所以我的第一个想法是行不通的。
但是:如果你有必要的权限,你不能只使用标准的System.IO调用将你在FileUpload中获得的文件保存到该UNC路径吗?类似的东西:
protected void Button1_Click(object sender, EventArgs e)
{
try
{
string completeFileName =
Path.Combine(@"\\192.168.1.3\upload", FileUpload1.FileName);
BinaryReader br = new BinaryReader(FileUpload1.PostedFile.InputStream);
FileStream fstm = new FileStream(completeFileName, FileMode.Create, FileAccess.ReadWrite);
BinaryWriter bw = new BinaryWriter(fstm);
byte[] buffer = br.ReadBytes(FileUpload1.PostedFile.ContentLength);
br.Close();
bw.Write(buffer);
bw.Flush();
bw.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
如果您希望上传非常大的文件,您可能希望将数据从BinaryReader
传输到BinaryWriter
- 而不是仅分配单个缓冲区 - 但这只是一个实现细节,真的。
答案 1 :(得分:1)
我几天前遇到了同样的问题,我通过在Web服务器上创建用户并使用相同的用户名和密码在存储服务器上解决了这个问题,然后我在web.config文件中模拟了用户。 / p>
注意:用户应在要存储文件的目录中拥有RW权限。