Pergunta

Atualmente tenho um aplicativo que recebe um arquivo enviado do meu aplicativo web. Agora eu preciso para transferir o arquivo para um servidor de arquivos, que passa a ser localizado na mesma rede (no entanto, isso pode não ser sempre o caso).

Eu estava tentando usar a classe webclient em C # .NET.

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

A máquina localizado na 192.168.1.28 é um servidor de arquivos e tem uma quota c: \ Arquivos. A partir de agora eu estou recebendo um erro de Falha de logon nome de usuário ou senha ruim, mas eu posso abrir explorador e digitar esse login caminho com sucesso. Eu também pode fazer o login usando desktop remoto, então eu sei as obras de conta de usuário.

Todas as ideias sobre esse erro? É possível transferir um arquivo diretamente como esse? Com a classe webclient ou talvez alguma outra classe?

Foi útil?

Solução

Apenas uso

File.Copy(filepath, "\\\\192.168.1.28\\Files");

Windows a FileShare exposta através de um caminho UNC é tratada como parte do sistema de arquivos, e não tem nada a ver com a web.

As credenciais utilizadas será a do processo de trabalho do ASP.NET, ou qualquer representação que tenha ativado. Se você pode ajustar aqueles que acertar, isso pode ser feito.

Você pode ter problemas porque você está usando o endereço IP em vez do nome do servidor (Windows confiar configurações prevenir deixando o domínio - usando IP você está escondendo quaisquer detalhes de domínio). Se possível, use o nome do servidor!

Se isto não está no mesmo domínio do Windows, e você está tentando usar uma conta de domínio diferente, você precisará especificar o nome de usuário como "[domain_or_machine] \ [nome de usuário]"

Se você precisa especificar credenciais explícitas, você precisa olhar para codificação de uma personificação solução .

Outras dicas

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

quando abrir manualmente o endereço IP (via o comando RUN ou mapear uma unidade de rede), o seu PC irá enviar suas credenciais sobre o tubo eo servidor de arquivos irá receber autorização da DC.

Quando ASP.Net tenta, então ele vai tentar usar o usuário de trabalho do IIS (a menos que a representação estiver activada que irá listar algumas outras questões). Tradicionalmente, o IIS usuário trabalhador não tem autorização para o trabalho através de servidores (ou mesmo em outras pastas no servidor web).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top