0

我基本上想在没有实际登录服务器的情况下将文件从客户端传输到文件存储服务器,这样客户端就无法直接访问服务器上的存储位置。只有当我通过 Windows 登录手动登录到存储服务器时,我才能做到这一点。我不想那样做。这是一个基于 Web 的应用程序。

使用下面的链接,我为我的应用程序编写了代码。虽然我无法正确处理,请参考链接并帮助我解决它...

使用 webclient 类将文件上传到文件服务器


以下是我的代码:-

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); 

这是我得到的错误:

WebClient 请求期间发生异常

4

2 回答 2

1

几天前我遇到了同样的问题,我通过在Web服务器和存储服务器上创建一个具有相同用户名和密码的用户来解决它,然后我在web.config文件中模拟了该用户。

注意:用户应该在要存储文件的目录中具有 RW 权限。

于 2011-06-23T05:27:31.230 回答
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); 
    } 
} 

如果您希望上传非常大的文件,您可能希望将数据从块传输BinaryReaderBinaryWriter块 - 而不是只分配一个缓冲区 - 但这只是一个实现细节,真的。

于 2010-03-17T06:47:01.497 回答