Pregunta

Actualmente tengo una aplicación que recibe un archivo cargado desde mi aplicación web. Ahora necesito transferir ese archivo a un servidor de archivos que está ubicado en la misma red (sin embargo, esto no siempre es el caso).

Estaba intentando usar la clase de cliente web en 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);
    }

La máquina ubicada en 192.168.1.28 es un servidor de archivos y tiene un recurso compartido c: \ Archivos. A partir de ahora estoy recibiendo un error de Inicio de sesión fallido, nombre de usuario o contraseña incorrectos, pero puedo abrir el explorador y escribir esa ruta de acceso correctamente. También puedo iniciar sesión con el escritorio remoto, por lo que sé que la cuenta de usuario funciona.

¿Alguna idea sobre este error? ¿Es posible transferir un archivo directamente así? ¿Con la clase de cliente web o tal vez alguna otra clase?

¿Fue útil?

Solución

Solo usa

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

Un recurso compartido de archivos de Windows expuesto a través de una ruta UNC se trata como parte del sistema de archivos y no tiene nada que ver con la web.

Las credenciales utilizadas serán las del proceso de trabajo ASP.NET o cualquier suplantación que haya habilitado. Si puede modificarlos para hacerlo bien, esto se puede hacer.

Puede tener problemas porque está usando la dirección IP en lugar del nombre del servidor (la configuración de confianza de Windows evita abandonar el dominio; al usar la IP se ocultan los detalles del dominio). ¡Si es posible, use el nombre del servidor!

Si esto no está en el mismo dominio de Windows e intenta utilizar una cuenta de dominio diferente, deberá especificar el nombre de usuario como " [dominio_o_máquina] \ [nombre de usuario] "

Si necesita especificar credenciales explícitas, deberá buscar codificando una suplantación solución .

Otros consejos

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

cuando abre manualmente la dirección IP (mediante el comando EJECUTAR o mapeando una unidad de red), su PC enviará sus credenciales a través de la tubería y el servidor de archivos recibirá la autorización del DC.

Cuando ASP.Net lo intente, intentará usar el usuario trabajador de IIS (a menos que se active la suplantación, que enumerará algunos otros problemas). Tradicionalmente, el usuario trabajador de IIS no tiene autorización para trabajar en servidores (o incluso en otras carpetas en el servidor web).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top