Question

Actuellement, j'ai une application qui reçoit un fichier téléchargé de mon application Web. Je dois maintenant transférer ce fichier sur un serveur de fichiers qui se trouve sur le même réseau (toutefois, ce n'est peut-être pas toujours le cas).

J'essayais d'utiliser la classe webclient 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 machine située au 192.168.1.28 est un serveur de fichiers et possède un partage c: \ Files. À l'heure actuelle, je reçois une erreur de connexion qui a échoué avec un nom d'utilisateur ou un mot de passe incorrect, mais je peux ouvrir l'explorateur et taper le nom de connexion avec succès. Je peux également me connecter à l'aide du bureau à distance, donc je sais que le compte d'utilisateur fonctionne.

Des idées sur cette erreur? Est-il possible de transférer un fichier directement comme ça? Avec la classe webclient ou peut-être une autre classe?

Était-ce utile?

La solution

Il suffit d'utiliser

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

Un partage de fichiers Windows exposé via un chemin UNC est traité comme une partie du système de fichiers et n'a rien à voir avec le Web.

Les informations d'identification utilisées seront celles du processus de travail ASP.NET ou de l'emprunt d'identité que vous avez activés. Si vous pouvez les ajuster pour bien faire les choses, cela peut être fait.

Vous pouvez rencontrer des problèmes parce que vous utilisez l'adresse IP au lieu du nom du serveur (les paramètres d'approbation Windows empêchent de quitter le domaine - en utilisant IP, vous masquez les détails du domaine). Dans la mesure du possible, utilisez le nom du serveur!

S'il ne s'agit pas du même domaine Windows et que vous essayez d'utiliser un autre compte de domaine, vous devrez spécifier le nom d'utilisateur sous la forme " [[domain_or_machine] \ [nomutilisateur] & <; p>

Si vous devez spécifier des informations d'identification explicites, vous devez vous informer sur le codage d'une usurpation d'identité. solution .

Autres conseils

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

Lorsque vous ouvrez manuellement l'adresse IP (via la commande RUN ou en mappant un lecteur réseau), votre PC envoie vos informations d'identification par le canal de connexion et le serveur de fichiers reçoit l'autorisation du contrôleur de domaine.

Lorsque ASP.Net essaie, il essaiera d’utiliser l’utilisateur IIS (sauf si l’emprunt d’emprunt d'identité est activé, ce qui énumérera quelques autres problèmes). Traditionnellement, l'utilisateur utilisateur IIS n'a pas l'autorisation de travailler sur plusieurs serveurs (ni même dans d'autres dossiers du serveur Web).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top