В настоящее время у меня есть приложение, которое получает загруженный файл из моего веб-приложения. Теперь мне нужно передать этот файл на файловый сервер, который находится в той же сети (однако это может быть не всегда).
Я пытался использовать класс webclient в 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);
}
Машина, расположенная по адресу 192.168.1.28, является файловым сервером и имеет общий ресурс c: \ Files. На данный момент я получаю сообщение об ошибке входа в систему с неверным именем пользователя или паролем, но я могу открыть проводник и успешно ввести этот путь для входа. Я также могу войти в систему с помощью удаленного рабочего стола, поэтому я знаю, что учетная запись пользователя работает.
Есть идеи по поводу этой ошибки? Можно ли так напрямую передать файл? С классом webclient или, может быть, с каким-то другим классом?
Учетная запись является пользователем на машине. Проблема в том, что мы переходим на новую архитектуру, и у нас есть 2 файловых сервера, сгруппированных и сбалансированных с виртуальным IP-адресом. Итак, мне нужно иметь возможность отправить файл VIP.
Я знаю, что использование веб-клиента работает, если я публикую на странице. Но я хочу избежать этого и напрямую передать файл. Есть способ сделать это?





Просто используйте
File.Copy(filepath, "\\\\192.168.1.28\\Files");
Общий доступ к файлам Windows, доступный через UNC-путь, рассматривается как часть файловой системы и не имеет ничего общего с Интернетом.
Будут использоваться учетные данные рабочего процесса ASP.NET или любого включенного вами олицетворения. Если вы можете настроить их, чтобы все было правильно, это можно сделать.
У вас могут возникнуть проблемы из-за того, что вы используете IP-адрес вместо имени сервера (настройки доверия Windows предотвращают выход из домена - используя IP-адрес, вы скрываете любые детали домена). Если возможно, используйте имя сервера!
Если это не тот же домен Windows, и вы пытаетесь использовать другую учетную запись домена, вам нужно будет указать имя пользователя как «[domain_or_machine] \ [username]»
Если вам нужно указать явные учетные данные, вам нужно будет изучить кодирование решения олицетворения.
Может не получится из-за разрешений. Он может использовать System.IO.File.Copy только в том случае, если он запускает веб-сайт под пользователем, у которого есть необходимые разрешения. По умолчанию веб-приложение работает под локальным пользователем с ограниченными правами, чтобы избежать проблем с безопасностью.
Добавлены некоторые детали разрешений. Согласен - с разрешениями может быть сложно.
@TheSoftwareJedi Могу ли я передать файл на файловый сервер, не сохраняя его на сервере, где файл был изначально загружен с веб-страницы?
когда вы вручную открываете IP-адрес (с помощью команды RUN или подключения сетевого диска), ваш компьютер отправит ваши учетные данные по каналу, а файловый сервер получит авторизацию от контроллера домена.
Когда ASP.Net пытается, он попытается использовать рабочего пользователя IIS (если не включено олицетворение, что приведет к перечислению нескольких других проблем). Обычно рабочий пользователь IIS не имеет разрешения на работу между серверами (или даже в других папках на веб-сервере).
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);
}
}
}
}
это учетная запись домена или компьютера?