문제

현재 웹 응용 프로그램에서 업로드 된 파일을 수신하는 응용 프로그램이 있습니다. 이제 해당 파일을 동일한 네트워크에있는 파일 서버로 전송해야합니다 (그러나 항상 그렇지는 않습니다).

C# .NET에서 WebClient 클래스를 사용하려고했습니다.

    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 : 파일이 있습니다. 현재 로그인 오류가 잘못 실패한 사용자 이름이나 비밀번호에 실패했지만 탐색기를 열고 해당 경로 로그인을 성공적으로 입력 할 수 있습니다. 원격 데스크탑을 사용하여 로그인 할 수도 있으므로 사용자 계정이 작동한다는 것을 알고 있습니다.

이 오류에 대한 아이디어가 있습니까? 그런 파일을 직접 전송할 수 있습니까? WebClient 클래스 또는 다른 클래스로?

도움이 되었습니까?

해결책

그냥 사용하십시오

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

UNC 경로를 통해 노출 된 Windows Fileshare는 파일 시스템의 일부로 취급되며 웹과 관련이 없습니다.

사용 된 자격 증명은 ASP.NET Worker 프로세스 또는 귀하가 활성화 한 모든 자격 증명입니다. 올바르게 얻도록 조정할 수 있다면이 작업을 수행 할 수 있습니다.

서버 이름 대신 IP 주소를 사용하고 있기 때문에 문제가 발생할 수 있습니다 (Windows Trust 설정은 도메인을 떠나는 것을 방지합니다. IP를 사용하여 도메인 세부 정보를 숨기는 것). 가능하다면 서버 이름을 사용하십시오!

이것이 동일한 Windows 도메인에 있지 않고 다른 도메인 계정을 사용하려는 경우 사용자 이름을 [domain_or_machine] [username]로 지정해야합니다.

명시 적 자격 증명을 지정 해야하는 경우 조사해야합니다. 사망자 솔루션 코딩.

다른 팁

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

IP 주소를 수동으로 열 때 (실행 명령을 통해 또는 네트워크 드라이브 매핑) PC는 파이프를 통해 자격 증명을 보내고 파일 서버는 DC로부터 인증을받습니다.

ASP.NET이 시도하면 IIS 작업자 사용자를 사용하려고 시도합니다 (다른 몇 가지 문제를 나열 할 사칭이 켜지지 않는 한). 전통적으로 IIS 작업자 사용자는 서버 (또는 웹 서버의 다른 폴더에서도)에서 작동 할 권한이 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top