Загрузка файлов на файловый сервер - PullRequest
1 голос
/ 15 марта 2010

Используя ссылку ниже, я написал код для своего приложения. Я не могу понять это правильно, пожалуйста, обратитесь по ссылке и помогите мне с этим ...

Загрузка файлов на файловый сервер с использованием класса веб-клиента


Вот мой код: -

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

}

Я также использовал: - File.Copy (filePath, "\\ 192.168.1.3 \ upload \");

Следующая строка не выполняется ...

byte[] arrReturn = client.UploadFile(addy, filePath);

попытался изменить его на: -

byte[] arrReturn = client.UploadFile("\\\\192.168.1.3\\upload\\", filePath);

ЭТО все еще не работает ... Любое решение для этого ??

Я в основном хочу передать файл с клиента на сервер хранения файлов без фактически войти на сервер, чтобы клиент не мог получить доступ к хранилищу на сервере напрямую.

Это ошибка, которую я получаю: - "Возникла исключительная ситуация во время запроса WebClient"

Ответы [ 2 ]

1 голос
/ 17 марта 2010

Копировать файлы из одной папки в другую очень легко.
Код ниже находится в C # .NET.
Сначала добавьте System.IO и System.NET в ваше пространство имен. Затем добавьте следующий код.

string _pathForImages = "c:\inetpub\wwwroot\NewFolder\ExistingFolder\Images\";
   try
    {
        string[] f = Directory.GetFiles(_pathForImages);
        int k = f.Length;
        string _pathForImages_dest = "c:\inetpub\wwwroot\NewFolder\NewFolder1\Images\";

        for (int i = 0; i < k; i++)
        {
            var kl = f[i].Split('\\');

            string fname = kl[kl.Length - 1];
            string j = _pathForImages_test;
            System.IO.File.Copy(f[i], _pathForImages_dest + fname);


        }
    }
    catch (Exception ex)
    {

    }


Если вы хотите скопировать новые файлы и ЗАМЕНИТЬ существующие, просто добавьте «true» в файл. Полный код:

string _pathForImages = "c:\inetpub\wwwroot\NewFolder\ExistingFolder\Images\";
   try
    {
        string[] f = Directory.GetFiles(_pathForImages);
        int k = f.Length;
        string _pathForImages_dest = "c:\inetpub\wwwroot\NewFolder\NewFolder1\Images\";

        for (int i = 0; i < k; i++)
        {
            var kl = f[i].Split('\\');

            string fname = kl[kl.Length - 1];
            string j = _pathForImages_test;
            System.IO.File.Copy(f[i], _pathForImages_dest + fname,true);


        }
    }
    catch (Exception ex)
    {

    }
0 голосов
/ 15 марта 2010

Пожалуйста, прочитайте следующую статью MSDN , так как она может помочь вам ответить на ваш вопрос.

EDIT: Вот (возможный) ответ на то, что вы ищете ... Чтобы скопировать файлы с локального компьютера, вы можете просто использовать System.IO.File.Copy(), поскольку вы уже зарегистрированы на этом компьютере. Однако, чтобы скопировать файлы с удаленного компьютера, на котором вы (еще) не вошли в систему, необходимо указать domainname, username и password, чтобы продолжить аутентификацию на удаленном компьютере. Пожалуйста, проверьте это и подтвердите, выполняет ли он то, что вы хотите:)

public void copyRemoteFiles(string sourceFile, string destFile) {
    IntPtr admin_token = default(IntPtr);
    WindowsIdentity wid_current = WindowsIdentity.GetCurrent();
    WindowsIdentity wid_admin = null;
    WindowsImpersonationContext wic = null;

    try {
        if (LogonUser(sUserName, sDomainName, sPassword, 9, 0, admin_token) != 0) {
            wid_admin = new WindowsIdentity(admin_token);
            wic = wid_admin.Impersonate();
            if (System.IO.File.Exists(sourceFile)) {
                System.IO.File.Copy(sourceFile, destFile, true);
            }
            else {
                //Copy Failed
                return;
            }
        }
        else {
            return;
        }
    }
    catch (System.Exception se) {
        int ret = Marshal.GetLastWin32Error();
        MessageBox.Show(ret.ToString(), "Error code: " + ret.ToString());
        MessageBox.Show(se.Message);
        if (wic != null) {
            wic.Undo();
        }
        return;
    }
    finally {
        if (wic != null) {
            wic.Undo();
        }

    }
}
...