Upload de arquivos para servidor de arquivos usando a classe webclient
-
06-07-2019 - |
Pergunta
Atualmente tenho um aplicativo que recebe um arquivo enviado do meu aplicativo web. Agora eu preciso para transferir o arquivo para um servidor de arquivos, que passa a ser localizado na mesma rede (no entanto, isso pode não ser sempre o caso).
Eu estava tentando usar a classe webclient em 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);
}
A máquina localizado na 192.168.1.28 é um servidor de arquivos e tem uma quota c: \ Arquivos. A partir de agora eu estou recebendo um erro de Falha de logon nome de usuário ou senha ruim, mas eu posso abrir explorador e digitar esse login caminho com sucesso. Eu também pode fazer o login usando desktop remoto, então eu sei as obras de conta de usuário.
Todas as ideias sobre esse erro? É possível transferir um arquivo diretamente como esse? Com a classe webclient ou talvez alguma outra classe?
Solução
Apenas uso
File.Copy(filepath, "\\\\192.168.1.28\\Files");
Windows a FileShare exposta através de um caminho UNC é tratada como parte do sistema de arquivos, e não tem nada a ver com a web.
As credenciais utilizadas será a do processo de trabalho do ASP.NET, ou qualquer representação que tenha ativado. Se você pode ajustar aqueles que acertar, isso pode ser feito.
Você pode ter problemas porque você está usando o endereço IP em vez do nome do servidor (Windows confiar configurações prevenir deixando o domínio - usando IP você está escondendo quaisquer detalhes de domínio). Se possível, use o nome do servidor!
Se isto não está no mesmo domínio do Windows, e você está tentando usar uma conta de domínio diferente, você precisará especificar o nome de usuário como "[domain_or_machine] \ [nome de usuário]"
Se você precisa especificar credenciais explícitas, você precisa olhar para codificação de uma personificação solução .
Outras dicas
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 abrir manualmente o endereço IP (via o comando RUN ou mapear uma unidade de rede), o seu PC irá enviar suas credenciais sobre o tubo eo servidor de arquivos irá receber autorização da DC.
Quando ASP.Net tenta, então ele vai tentar usar o usuário de trabalho do IIS (a menos que a representação estiver activada que irá listar algumas outras questões). Tradicionalmente, o IIS usuário trabalhador não tem autorização para o trabalho através de servidores (ou mesmo em outras pastas no servidor web).