2008-11-04 29 views
9

Hiện tại tôi có một ứng dụng nhận tệp được tải lên từ ứng dụng web của tôi. Bây giờ tôi cần phải chuyển tập tin đó đến một máy chủ tập tin mà sẽ xảy ra được đặt trên cùng một mạng (tuy nhiên điều này có thể không phải lúc nào cũng đúng).Tải tệp lên máy chủ tệp bằng cách sử dụng lớp webclient

Tôi đã cố gắng sử dụng lớp webclient trong 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); 
    } 

Máy nằm ở 192.168.1.28 là máy chủ tệp và có chia sẻ c: \ Files. Hiện tại, tôi nhận được lỗi Đăng nhập không thành công tên người dùng hoặc mật khẩu không hợp lệ, nhưng tôi có thể mở trình khám phá và nhập vào đó đăng nhập đường dẫn thành công. Tôi cũng có thể đăng nhập bằng máy tính để bàn từ xa, vì vậy tôi biết tài khoản người dùng hoạt động.

Bất kỳ ý tưởng nào về lỗi này? Có thể truyền tệp trực tiếp như vậy không? Với lớp webclient hoặc có thể một số lớp khác?

+0

là tài khoản tài khoản miền hoặc tài khoản máy? – TheSoftwareJedi

+0

Tài khoản là người dùng trên máy. Vấn đề là chúng tôi đang chuyển sang một kiến ​​trúc mới và chúng tôi có 2 máy chủ tập tin nhóm và tải cân bằng với một ip ảo. Vì vậy, tôi cần để có thể gửi tệp cho VIP. – JustLogic

+1

Tôi biết sử dụng ứng dụng khách web nếu tôi đăng lên một trang. Nhưng tôi muốn tránh điều đó và trực tiếp chuyển tập tin. Có cách nào làm được việc này không? – JustLogic

Trả lời

16

Chỉ cần sử dụng

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

Một fileshare cửa sổ tiếp xúc thông qua một đường dẫn UNC được coi là một phần của hệ thống tập tin, và không có gì để làm với web.

Thông tin đăng nhập được sử dụng sẽ là quy trình của nhân viên ASP.NET hoặc bất kỳ mạo danh nào bạn đã bật. Nếu bạn có thể tinh chỉnh chúng để làm cho nó đúng, điều này có thể được thực hiện.

Bạn có thể gặp sự cố vì bạn đang sử dụng địa chỉ IP thay vì tên máy chủ (cài đặt tin cậy cửa sổ ngăn không cho miền - bằng cách sử dụng IP bạn đang ẩn bất kỳ chi tiết tên miền nào). Nếu có thể, hãy sử dụng tên máy chủ!

Nếu đây không phải là trên các cửa sổ cùng một tên miền, và bạn đang cố gắng sử dụng một tài khoản tên miền khác nhau, bạn sẽ cần phải xác định tên người dùng như "[domain_or_machine] \ [username]"

Nếu bạn cần để chỉ định thông tin xác thực rõ ràng, bạn sẽ cần phải xem xét coding an impersonation solution.

+0

Có thể nó sẽ không hoạt động vì các điều khoản. Anh ta chỉ có thể sử dụng System.IO.File.Copy nếu anh ta chạy trang web dưới một người dùng có quyền cần thiết. Theo mặc định, ứng dụng web đang chạy dưới một người dùng địa phương, hạn chế để tránh các vấn đề bảo mật. – Biri

+0

Đã thêm một số chi tiết quyền. Đồng ý - quyền có thể trở nên phức tạp. – TheSoftwareJedi

+0

@ TheSoftwareJedi Tôi có thể chuyển tệp sang máy chủ tệp mà không lưu trữ trên máy chủ nơi tệp được tải lên ban đầu từ trang web không? – Alex

0

khi bạn mở thủ công địa chỉ IP (thông qua lệnh RUN hoặc ánh xạ ổ đĩa mạng), máy tính của bạn sẽ gửi thông tin đăng nhập của bạn qua đường ống và máy chủ tệp sẽ nhận được ủy quyền từ DC.

Khi ASP.Net cố gắng, sau đó nó sẽ cố gắng sử dụng người dùng công nhân IIS (trừ khi mạo danh được bật sẽ liệt kê một vài vấn đề khác). Theo truyền thống, người dùng công nhân IIS không có quyền làm việc trên các máy chủ (hoặc thậm chí trong các thư mục khác trên máy chủ web).

3
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); 
     } 
    } 
} 
} 
Các vấn đề liên quan