Domanda

Attualmente ho un'applicazione che riceve un file caricato dalla mia applicazione web. Ora devo trasferire quel file su un file server che si trova sulla stessa rete (tuttavia potrebbe non essere sempre così).

Stavo tentando di utilizzare la classe client web in 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 macchina situata in 192.168.1.28 è un file server e ha una condivisione c: \ Files. A partire da ora sto ricevendo un errore di accesso non riuscito nome utente o password errati, ma posso aprire explorer e digitare con successo quel percorso di accesso. Posso anche accedere utilizzando il desktop remoto, quindi so che l'account utente funziona.

Qualche idea su questo errore? È possibile trasferire un file direttamente in questo modo? Con la classe client web o forse qualche altra classe?

È stato utile?

Soluzione

Usa solo

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

Una condivisione file di Windows esposta tramite un percorso UNC viene trattata come parte del file system e non ha nulla a che fare con il web.

Le credenziali utilizzate saranno quelle del processo di lavoro ASP.NET o qualsiasi rappresentazione che hai abilitato. Se riesci a modificarli per farlo bene, puoi farlo.

Potresti riscontrare problemi perché stai utilizzando l'indirizzo IP anziché il nome del server (le impostazioni di affidabilità di Windows impediscono di uscire dal dominio - utilizzando IP nascondi i dettagli del dominio). Se possibile, usa il nome del server!

Se questo non si trova sullo stesso dominio Windows e stai tentando di utilizzare un altro account di dominio, dovrai specificare il nome utente come " [domain_or_machine] \ [username] "

Se è necessario specificare credenziali esplicite, è necessario esaminare codificare una rappresentazione soluzione .

Altri suggerimenti

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 si apre manualmente l'indirizzo IP (tramite il comando RUN o mappando un'unità di rete), il PC invierà le proprie credenziali sulla pipe e il file server riceverà l'autorizzazione dal controller di dominio.

Quando ASP.Net prova, tenterà di utilizzare l'utente del lavoratore IIS (a meno che non sia attivata la rappresentazione che elencherà alcuni altri problemi). Tradizionalmente, l'utente lavoratore IIS non è autorizzato a lavorare su più server (o anche in altre cartelle sul server Web).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top